<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>std.format</title>
  <link href="html.css" rel="stylesheet" type="text/css">
</head>
<body>
<table><tr>
<td class="linescolumn"><a id="L1" href="#L1">1</a><a id="L2" href="#L2">2</a><a id="L3" href="#L3">3</a><a id="L4" href="#L4">4</a><a id="L5" href="#L5">5</a><a id="L6" href="#L6">6</a><a id="L7" href="#L7">7</a><a id="L8" href="#L8">8</a><a id="L9" href="#L9">9</a><a id="L10" href="#L10">10</a><a id="L11" href="#L11">11</a><a id="L12" href="#L12">12</a><a id="L13" href="#L13">13</a><a id="L14" href="#L14">14</a><a id="L15" href="#L15">15</a><a id="L16" href="#L16">16</a><a id="L17" href="#L17">17</a><a id="L18" href="#L18">18</a><a id="L19" href="#L19">19</a><a id="L20" href="#L20">20</a><a id="L21" href="#L21">21</a><a id="L22" href="#L22">22</a><a id="L23" href="#L23">23</a><a id="L24" href="#L24">24</a><a id="L25" href="#L25">25</a><a id="L26" href="#L26">26</a><a id="L27" href="#L27">27</a><a id="L28" href="#L28">28</a><a id="L29" href="#L29">29</a><a id="L30" href="#L30">30</a><a id="L31" href="#L31">31</a><a id="L32" href="#L32">32</a><a id="L33" href="#L33">33</a><a id="L34" href="#L34">34</a><a id="L35" href="#L35">35</a><a id="L36" href="#L36">36</a><a id="L37" href="#L37">37</a><a id="L38" href="#L38">38</a><a id="L39" href="#L39">39</a><a id="L40" href="#L40">40</a><a id="L41" href="#L41">41</a><a id="L42" href="#L42">42</a><a id="L43" href="#L43">43</a><a id="L44" href="#L44">44</a><a id="L45" href="#L45">45</a><a id="L46" href="#L46">46</a><a id="L47" href="#L47">47</a><a id="L48" href="#L48">48</a><a id="L49" href="#L49">49</a><a id="L50" href="#L50">50</a><a id="L51" href="#L51">51</a><a id="L52" href="#L52">52</a><a id="L53" href="#L53">53</a><a id="L54" href="#L54">54</a><a id="L55" href="#L55">55</a><a id="L56" href="#L56">56</a><a id="L57" href="#L57">57</a><a id="L58" href="#L58">58</a><a id="L59" href="#L59">59</a><a id="L60" href="#L60">60</a><a id="L61" href="#L61">61</a><a id="L62" href="#L62">62</a><a id="L63" href="#L63">63</a><a id="L64" href="#L64">64</a><a id="L65" href="#L65">65</a><a id="L66" href="#L66">66</a><a id="L67" href="#L67">67</a><a id="L68" href="#L68">68</a><a id="L69" href="#L69">69</a><a id="L70" href="#L70">70</a><a id="L71" href="#L71">71</a><a id="L72" href="#L72">72</a><a id="L73" href="#L73">73</a><a id="L74" href="#L74">74</a><a id="L75" href="#L75">75</a><a id="L76" href="#L76">76</a><a id="L77" href="#L77">77</a><a id="L78" href="#L78">78</a><a id="L79" href="#L79">79</a><a id="L80" href="#L80">80</a><a id="L81" href="#L81">81</a><a id="L82" href="#L82">82</a><a id="L83" href="#L83">83</a><a id="L84" href="#L84">84</a><a id="L85" href="#L85">85</a><a id="L86" href="#L86">86</a><a id="L87" href="#L87">87</a><a id="L88" href="#L88">88</a><a id="L89" href="#L89">89</a><a id="L90" href="#L90">90</a><a id="L91" href="#L91">91</a><a id="L92" href="#L92">92</a><a id="L93" href="#L93">93</a><a id="L94" href="#L94">94</a><a id="L95" href="#L95">95</a><a id="L96" href="#L96">96</a><a id="L97" href="#L97">97</a><a id="L98" href="#L98">98</a><a id="L99" href="#L99">99</a><a id="L100" href="#L100">100</a><a id="L101" href="#L101">101</a><a id="L102" href="#L102">102</a><a id="L103" href="#L103">103</a><a id="L104" href="#L104">104</a><a id="L105" href="#L105">105</a><a id="L106" href="#L106">106</a><a id="L107" href="#L107">107</a><a id="L108" href="#L108">108</a><a id="L109" href="#L109">109</a><a id="L110" href="#L110">110</a><a id="L111" href="#L111">111</a><a id="L112" href="#L112">112</a><a id="L113" href="#L113">113</a><a id="L114" href="#L114">114</a><a id="L115" href="#L115">115</a><a id="L116" href="#L116">116</a><a id="L117" href="#L117">117</a><a id="L118" href="#L118">118</a><a id="L119" href="#L119">119</a><a id="L120" href="#L120">120</a><a id="L121" href="#L121">121</a><a id="L122" href="#L122">122</a><a id="L123" href="#L123">123</a><a id="L124" href="#L124">124</a><a id="L125" href="#L125">125</a><a id="L126" href="#L126">126</a><a id="L127" href="#L127">127</a><a id="L128" href="#L128">128</a><a id="L129" href="#L129">129</a><a id="L130" href="#L130">130</a><a id="L131" href="#L131">131</a><a id="L132" href="#L132">132</a><a id="L133" href="#L133">133</a><a id="L134" href="#L134">134</a><a id="L135" href="#L135">135</a><a id="L136" href="#L136">136</a><a id="L137" href="#L137">137</a><a id="L138" href="#L138">138</a><a id="L139" href="#L139">139</a><a id="L140" href="#L140">140</a><a id="L141" href="#L141">141</a><a id="L142" href="#L142">142</a><a id="L143" href="#L143">143</a><a id="L144" href="#L144">144</a><a id="L145" href="#L145">145</a><a id="L146" href="#L146">146</a><a id="L147" href="#L147">147</a><a id="L148" href="#L148">148</a><a id="L149" href="#L149">149</a><a id="L150" href="#L150">150</a><a id="L151" href="#L151">151</a><a id="L152" href="#L152">152</a><a id="L153" href="#L153">153</a><a id="L154" href="#L154">154</a><a id="L155" href="#L155">155</a><a id="L156" href="#L156">156</a><a id="L157" href="#L157">157</a><a id="L158" href="#L158">158</a><a id="L159" href="#L159">159</a><a id="L160" href="#L160">160</a><a id="L161" href="#L161">161</a><a id="L162" href="#L162">162</a><a id="L163" href="#L163">163</a><a id="L164" href="#L164">164</a><a id="L165" href="#L165">165</a><a id="L166" href="#L166">166</a><a id="L167" href="#L167">167</a><a id="L168" href="#L168">168</a><a id="L169" href="#L169">169</a><a id="L170" href="#L170">170</a><a id="L171" href="#L171">171</a><a id="L172" href="#L172">172</a><a id="L173" href="#L173">173</a><a id="L174" href="#L174">174</a><a id="L175" href="#L175">175</a><a id="L176" href="#L176">176</a><a id="L177" href="#L177">177</a><a id="L178" href="#L178">178</a><a id="L179" href="#L179">179</a><a id="L180" href="#L180">180</a><a id="L181" href="#L181">181</a><a id="L182" href="#L182">182</a><a id="L183" href="#L183">183</a><a id="L184" href="#L184">184</a><a id="L185" href="#L185">185</a><a id="L186" href="#L186">186</a><a id="L187" href="#L187">187</a><a id="L188" href="#L188">188</a><a id="L189" href="#L189">189</a><a id="L190" href="#L190">190</a><a id="L191" href="#L191">191</a><a id="L192" href="#L192">192</a><a id="L193" href="#L193">193</a><a id="L194" href="#L194">194</a><a id="L195" href="#L195">195</a><a id="L196" href="#L196">196</a><a id="L197" href="#L197">197</a><a id="L198" href="#L198">198</a><a id="L199" href="#L199">199</a><a id="L200" href="#L200">200</a><a id="L201" href="#L201">201</a><a id="L202" href="#L202">202</a><a id="L203" href="#L203">203</a><a id="L204" href="#L204">204</a><a id="L205" href="#L205">205</a><a id="L206" href="#L206">206</a><a id="L207" href="#L207">207</a><a id="L208" href="#L208">208</a><a id="L209" href="#L209">209</a><a id="L210" href="#L210">210</a><a id="L211" href="#L211">211</a><a id="L212" href="#L212">212</a><a id="L213" href="#L213">213</a><a id="L214" href="#L214">214</a><a id="L215" href="#L215">215</a><a id="L216" href="#L216">216</a><a id="L217" href="#L217">217</a><a id="L218" href="#L218">218</a><a id="L219" href="#L219">219</a><a id="L220" href="#L220">220</a><a id="L221" href="#L221">221</a><a id="L222" href="#L222">222</a><a id="L223" href="#L223">223</a><a id="L224" href="#L224">224</a><a id="L225" href="#L225">225</a><a id="L226" href="#L226">226</a><a id="L227" href="#L227">227</a><a id="L228" href="#L228">228</a><a id="L229" href="#L229">229</a><a id="L230" href="#L230">230</a><a id="L231" href="#L231">231</a><a id="L232" href="#L232">232</a><a id="L233" href="#L233">233</a><a id="L234" href="#L234">234</a><a id="L235" href="#L235">235</a><a id="L236" href="#L236">236</a><a id="L237" href="#L237">237</a><a id="L238" href="#L238">238</a><a id="L239" href="#L239">239</a><a id="L240" href="#L240">240</a><a id="L241" href="#L241">241</a><a id="L242" href="#L242">242</a><a id="L243" href="#L243">243</a><a id="L244" href="#L244">244</a><a id="L245" href="#L245">245</a><a id="L246" href="#L246">246</a><a id="L247" href="#L247">247</a><a id="L248" href="#L248">248</a><a id="L249" href="#L249">249</a><a id="L250" href="#L250">250</a><a id="L251" href="#L251">251</a><a id="L252" href="#L252">252</a><a id="L253" href="#L253">253</a><a id="L254" href="#L254">254</a><a id="L255" href="#L255">255</a><a id="L256" href="#L256">256</a><a id="L257" href="#L257">257</a><a id="L258" href="#L258">258</a><a id="L259" href="#L259">259</a><a id="L260" href="#L260">260</a><a id="L261" href="#L261">261</a><a id="L262" href="#L262">262</a><a id="L263" href="#L263">263</a><a id="L264" href="#L264">264</a><a id="L265" href="#L265">265</a><a id="L266" href="#L266">266</a><a id="L267" href="#L267">267</a><a id="L268" href="#L268">268</a><a id="L269" href="#L269">269</a><a id="L270" href="#L270">270</a><a id="L271" href="#L271">271</a><a id="L272" href="#L272">272</a><a id="L273" href="#L273">273</a><a id="L274" href="#L274">274</a><a id="L275" href="#L275">275</a><a id="L276" href="#L276">276</a><a id="L277" href="#L277">277</a><a id="L278" href="#L278">278</a><a id="L279" href="#L279">279</a><a id="L280" href="#L280">280</a><a id="L281" href="#L281">281</a><a id="L282" href="#L282">282</a><a id="L283" href="#L283">283</a><a id="L284" href="#L284">284</a><a id="L285" href="#L285">285</a><a id="L286" href="#L286">286</a><a id="L287" href="#L287">287</a><a id="L288" href="#L288">288</a><a id="L289" href="#L289">289</a><a id="L290" href="#L290">290</a><a id="L291" href="#L291">291</a><a id="L292" href="#L292">292</a><a id="L293" href="#L293">293</a><a id="L294" href="#L294">294</a><a id="L295" href="#L295">295</a><a id="L296" href="#L296">296</a><a id="L297" href="#L297">297</a><a id="L298" href="#L298">298</a><a id="L299" href="#L299">299</a><a id="L300" href="#L300">300</a><a id="L301" href="#L301">301</a><a id="L302" href="#L302">302</a><a id="L303" href="#L303">303</a><a id="L304" href="#L304">304</a><a id="L305" href="#L305">305</a><a id="L306" href="#L306">306</a><a id="L307" href="#L307">307</a><a id="L308" href="#L308">308</a><a id="L309" href="#L309">309</a><a id="L310" href="#L310">310</a><a id="L311" href="#L311">311</a><a id="L312" href="#L312">312</a><a id="L313" href="#L313">313</a><a id="L314" href="#L314">314</a><a id="L315" href="#L315">315</a><a id="L316" href="#L316">316</a><a id="L317" href="#L317">317</a><a id="L318" href="#L318">318</a><a id="L319" href="#L319">319</a><a id="L320" href="#L320">320</a><a id="L321" href="#L321">321</a><a id="L322" href="#L322">322</a><a id="L323" href="#L323">323</a><a id="L324" href="#L324">324</a><a id="L325" href="#L325">325</a><a id="L326" href="#L326">326</a><a id="L327" href="#L327">327</a><a id="L328" href="#L328">328</a><a id="L329" href="#L329">329</a><a id="L330" href="#L330">330</a><a id="L331" href="#L331">331</a><a id="L332" href="#L332">332</a><a id="L333" href="#L333">333</a><a id="L334" href="#L334">334</a><a id="L335" href="#L335">335</a><a id="L336" href="#L336">336</a><a id="L337" href="#L337">337</a><a id="L338" href="#L338">338</a><a id="L339" href="#L339">339</a><a id="L340" href="#L340">340</a><a id="L341" href="#L341">341</a><a id="L342" href="#L342">342</a><a id="L343" href="#L343">343</a><a id="L344" href="#L344">344</a><a id="L345" href="#L345">345</a><a id="L346" href="#L346">346</a><a id="L347" href="#L347">347</a><a id="L348" href="#L348">348</a><a id="L349" href="#L349">349</a><a id="L350" href="#L350">350</a><a id="L351" href="#L351">351</a><a id="L352" href="#L352">352</a><a id="L353" href="#L353">353</a><a id="L354" href="#L354">354</a><a id="L355" href="#L355">355</a><a id="L356" href="#L356">356</a><a id="L357" href="#L357">357</a><a id="L358" href="#L358">358</a><a id="L359" href="#L359">359</a><a id="L360" href="#L360">360</a><a id="L361" href="#L361">361</a><a id="L362" href="#L362">362</a><a id="L363" href="#L363">363</a><a id="L364" href="#L364">364</a><a id="L365" href="#L365">365</a><a id="L366" href="#L366">366</a><a id="L367" href="#L367">367</a><a id="L368" href="#L368">368</a><a id="L369" href="#L369">369</a><a id="L370" href="#L370">370</a><a id="L371" href="#L371">371</a><a id="L372" href="#L372">372</a><a id="L373" href="#L373">373</a><a id="L374" href="#L374">374</a><a id="L375" href="#L375">375</a><a id="L376" href="#L376">376</a><a id="L377" href="#L377">377</a><a id="L378" href="#L378">378</a><a id="L379" href="#L379">379</a><a id="L380" href="#L380">380</a><a id="L381" href="#L381">381</a><a id="L382" href="#L382">382</a><a id="L383" href="#L383">383</a><a id="L384" href="#L384">384</a><a id="L385" href="#L385">385</a><a id="L386" href="#L386">386</a><a id="L387" href="#L387">387</a><a id="L388" href="#L388">388</a><a id="L389" href="#L389">389</a><a id="L390" href="#L390">390</a><a id="L391" href="#L391">391</a><a id="L392" href="#L392">392</a><a id="L393" href="#L393">393</a><a id="L394" href="#L394">394</a><a id="L395" href="#L395">395</a><a id="L396" href="#L396">396</a><a id="L397" href="#L397">397</a><a id="L398" href="#L398">398</a><a id="L399" href="#L399">399</a><a id="L400" href="#L400">400</a><a id="L401" href="#L401">401</a><a id="L402" href="#L402">402</a><a id="L403" href="#L403">403</a><a id="L404" href="#L404">404</a><a id="L405" href="#L405">405</a><a id="L406" href="#L406">406</a><a id="L407" href="#L407">407</a><a id="L408" href="#L408">408</a><a id="L409" href="#L409">409</a><a id="L410" href="#L410">410</a><a id="L411" href="#L411">411</a><a id="L412" href="#L412">412</a><a id="L413" href="#L413">413</a><a id="L414" href="#L414">414</a><a id="L415" href="#L415">415</a><a id="L416" href="#L416">416</a><a id="L417" href="#L417">417</a><a id="L418" href="#L418">418</a><a id="L419" href="#L419">419</a><a id="L420" href="#L420">420</a><a id="L421" href="#L421">421</a><a id="L422" href="#L422">422</a><a id="L423" href="#L423">423</a><a id="L424" href="#L424">424</a><a id="L425" href="#L425">425</a><a id="L426" href="#L426">426</a><a id="L427" href="#L427">427</a><a id="L428" href="#L428">428</a><a id="L429" href="#L429">429</a><a id="L430" href="#L430">430</a><a id="L431" href="#L431">431</a><a id="L432" href="#L432">432</a><a id="L433" href="#L433">433</a><a id="L434" href="#L434">434</a><a id="L435" href="#L435">435</a><a id="L436" href="#L436">436</a><a id="L437" href="#L437">437</a><a id="L438" href="#L438">438</a><a id="L439" href="#L439">439</a><a id="L440" href="#L440">440</a><a id="L441" href="#L441">441</a><a id="L442" href="#L442">442</a><a id="L443" href="#L443">443</a><a id="L444" href="#L444">444</a><a id="L445" href="#L445">445</a><a id="L446" href="#L446">446</a><a id="L447" href="#L447">447</a><a id="L448" href="#L448">448</a><a id="L449" href="#L449">449</a><a id="L450" href="#L450">450</a><a id="L451" href="#L451">451</a><a id="L452" href="#L452">452</a><a id="L453" href="#L453">453</a><a id="L454" href="#L454">454</a><a id="L455" href="#L455">455</a><a id="L456" href="#L456">456</a><a id="L457" href="#L457">457</a><a id="L458" href="#L458">458</a><a id="L459" href="#L459">459</a><a id="L460" href="#L460">460</a><a id="L461" href="#L461">461</a><a id="L462" href="#L462">462</a><a id="L463" href="#L463">463</a><a id="L464" href="#L464">464</a><a id="L465" href="#L465">465</a><a id="L466" href="#L466">466</a><a id="L467" href="#L467">467</a><a id="L468" href="#L468">468</a><a id="L469" href="#L469">469</a><a id="L470" href="#L470">470</a><a id="L471" href="#L471">471</a><a id="L472" href="#L472">472</a><a id="L473" href="#L473">473</a><a id="L474" href="#L474">474</a><a id="L475" href="#L475">475</a><a id="L476" href="#L476">476</a><a id="L477" href="#L477">477</a><a id="L478" href="#L478">478</a><a id="L479" href="#L479">479</a><a id="L480" href="#L480">480</a><a id="L481" href="#L481">481</a><a id="L482" href="#L482">482</a><a id="L483" href="#L483">483</a><a id="L484" href="#L484">484</a><a id="L485" href="#L485">485</a><a id="L486" href="#L486">486</a><a id="L487" href="#L487">487</a><a id="L488" href="#L488">488</a><a id="L489" href="#L489">489</a><a id="L490" href="#L490">490</a><a id="L491" href="#L491">491</a><a id="L492" href="#L492">492</a><a id="L493" href="#L493">493</a><a id="L494" href="#L494">494</a><a id="L495" href="#L495">495</a><a id="L496" href="#L496">496</a><a id="L497" href="#L497">497</a><a id="L498" href="#L498">498</a><a id="L499" href="#L499">499</a><a id="L500" href="#L500">500</a><a id="L501" href="#L501">501</a><a id="L502" href="#L502">502</a><a id="L503" href="#L503">503</a><a id="L504" href="#L504">504</a><a id="L505" href="#L505">505</a><a id="L506" href="#L506">506</a><a id="L507" href="#L507">507</a><a id="L508" href="#L508">508</a><a id="L509" href="#L509">509</a><a id="L510" href="#L510">510</a><a id="L511" href="#L511">511</a><a id="L512" href="#L512">512</a><a id="L513" href="#L513">513</a><a id="L514" href="#L514">514</a><a id="L515" href="#L515">515</a><a id="L516" href="#L516">516</a><a id="L517" href="#L517">517</a><a id="L518" href="#L518">518</a><a id="L519" href="#L519">519</a><a id="L520" href="#L520">520</a><a id="L521" href="#L521">521</a><a id="L522" href="#L522">522</a><a id="L523" href="#L523">523</a><a id="L524" href="#L524">524</a><a id="L525" href="#L525">525</a><a id="L526" href="#L526">526</a><a id="L527" href="#L527">527</a><a id="L528" href="#L528">528</a><a id="L529" href="#L529">529</a><a id="L530" href="#L530">530</a><a id="L531" href="#L531">531</a><a id="L532" href="#L532">532</a><a id="L533" href="#L533">533</a><a id="L534" href="#L534">534</a><a id="L535" href="#L535">535</a><a id="L536" href="#L536">536</a><a id="L537" href="#L537">537</a><a id="L538" href="#L538">538</a><a id="L539" href="#L539">539</a><a id="L540" href="#L540">540</a><a id="L541" href="#L541">541</a><a id="L542" href="#L542">542</a><a id="L543" href="#L543">543</a><a id="L544" href="#L544">544</a><a id="L545" href="#L545">545</a><a id="L546" href="#L546">546</a><a id="L547" href="#L547">547</a><a id="L548" href="#L548">548</a><a id="L549" href="#L549">549</a><a id="L550" href="#L550">550</a><a id="L551" href="#L551">551</a><a id="L552" href="#L552">552</a><a id="L553" href="#L553">553</a><a id="L554" href="#L554">554</a><a id="L555" href="#L555">555</a><a id="L556" href="#L556">556</a><a id="L557" href="#L557">557</a><a id="L558" href="#L558">558</a><a id="L559" href="#L559">559</a><a id="L560" href="#L560">560</a><a id="L561" href="#L561">561</a><a id="L562" href="#L562">562</a><a id="L563" href="#L563">563</a><a id="L564" href="#L564">564</a><a id="L565" href="#L565">565</a><a id="L566" href="#L566">566</a><a id="L567" href="#L567">567</a><a id="L568" href="#L568">568</a><a id="L569" href="#L569">569</a><a id="L570" href="#L570">570</a><a id="L571" href="#L571">571</a><a id="L572" href="#L572">572</a><a id="L573" href="#L573">573</a><a id="L574" href="#L574">574</a><a id="L575" href="#L575">575</a><a id="L576" href="#L576">576</a><a id="L577" href="#L577">577</a><a id="L578" href="#L578">578</a><a id="L579" href="#L579">579</a><a id="L580" href="#L580">580</a><a id="L581" href="#L581">581</a><a id="L582" href="#L582">582</a><a id="L583" href="#L583">583</a><a id="L584" href="#L584">584</a><a id="L585" href="#L585">585</a><a id="L586" href="#L586">586</a><a id="L587" href="#L587">587</a><a id="L588" href="#L588">588</a><a id="L589" href="#L589">589</a><a id="L590" href="#L590">590</a><a id="L591" href="#L591">591</a><a id="L592" href="#L592">592</a><a id="L593" href="#L593">593</a><a id="L594" href="#L594">594</a><a id="L595" href="#L595">595</a><a id="L596" href="#L596">596</a><a id="L597" href="#L597">597</a><a id="L598" href="#L598">598</a><a id="L599" href="#L599">599</a><a id="L600" href="#L600">600</a><a id="L601" href="#L601">601</a><a id="L602" href="#L602">602</a><a id="L603" href="#L603">603</a><a id="L604" href="#L604">604</a><a id="L605" href="#L605">605</a><a id="L606" href="#L606">606</a><a id="L607" href="#L607">607</a><a id="L608" href="#L608">608</a><a id="L609" href="#L609">609</a><a id="L610" href="#L610">610</a><a id="L611" href="#L611">611</a><a id="L612" href="#L612">612</a><a id="L613" href="#L613">613</a><a id="L614" href="#L614">614</a><a id="L615" href="#L615">615</a><a id="L616" href="#L616">616</a><a id="L617" href="#L617">617</a><a id="L618" href="#L618">618</a><a id="L619" href="#L619">619</a><a id="L620" href="#L620">620</a><a id="L621" href="#L621">621</a><a id="L622" href="#L622">622</a><a id="L623" href="#L623">623</a><a id="L624" href="#L624">624</a><a id="L625" href="#L625">625</a><a id="L626" href="#L626">626</a><a id="L627" href="#L627">627</a><a id="L628" href="#L628">628</a><a id="L629" href="#L629">629</a><a id="L630" href="#L630">630</a><a id="L631" href="#L631">631</a><a id="L632" href="#L632">632</a><a id="L633" href="#L633">633</a><a id="L634" href="#L634">634</a><a id="L635" href="#L635">635</a><a id="L636" href="#L636">636</a><a id="L637" href="#L637">637</a><a id="L638" href="#L638">638</a><a id="L639" href="#L639">639</a><a id="L640" href="#L640">640</a><a id="L641" href="#L641">641</a><a id="L642" href="#L642">642</a><a id="L643" href="#L643">643</a><a id="L644" href="#L644">644</a><a id="L645" href="#L645">645</a><a id="L646" href="#L646">646</a><a id="L647" href="#L647">647</a><a id="L648" href="#L648">648</a><a id="L649" href="#L649">649</a><a id="L650" href="#L650">650</a><a id="L651" href="#L651">651</a><a id="L652" href="#L652">652</a><a id="L653" href="#L653">653</a><a id="L654" href="#L654">654</a><a id="L655" href="#L655">655</a><a id="L656" href="#L656">656</a><a id="L657" href="#L657">657</a><a id="L658" href="#L658">658</a><a id="L659" href="#L659">659</a><a id="L660" href="#L660">660</a><a id="L661" href="#L661">661</a><a id="L662" href="#L662">662</a><a id="L663" href="#L663">663</a><a id="L664" href="#L664">664</a><a id="L665" href="#L665">665</a><a id="L666" href="#L666">666</a><a id="L667" href="#L667">667</a><a id="L668" href="#L668">668</a><a id="L669" href="#L669">669</a><a id="L670" href="#L670">670</a><a id="L671" href="#L671">671</a><a id="L672" href="#L672">672</a><a id="L673" href="#L673">673</a><a id="L674" href="#L674">674</a><a id="L675" href="#L675">675</a><a id="L676" href="#L676">676</a><a id="L677" href="#L677">677</a><a id="L678" href="#L678">678</a><a id="L679" href="#L679">679</a><a id="L680" href="#L680">680</a><a id="L681" href="#L681">681</a><a id="L682" href="#L682">682</a><a id="L683" href="#L683">683</a><a id="L684" href="#L684">684</a><a id="L685" href="#L685">685</a><a id="L686" href="#L686">686</a><a id="L687" href="#L687">687</a><a id="L688" href="#L688">688</a><a id="L689" href="#L689">689</a><a id="L690" href="#L690">690</a><a id="L691" href="#L691">691</a><a id="L692" href="#L692">692</a><a id="L693" href="#L693">693</a><a id="L694" href="#L694">694</a><a id="L695" href="#L695">695</a><a id="L696" href="#L696">696</a><a id="L697" href="#L697">697</a><a id="L698" href="#L698">698</a><a id="L699" href="#L699">699</a><a id="L700" href="#L700">700</a><a id="L701" href="#L701">701</a><a id="L702" href="#L702">702</a><a id="L703" href="#L703">703</a><a id="L704" href="#L704">704</a><a id="L705" href="#L705">705</a><a id="L706" href="#L706">706</a><a id="L707" href="#L707">707</a><a id="L708" href="#L708">708</a><a id="L709" href="#L709">709</a><a id="L710" href="#L710">710</a><a id="L711" href="#L711">711</a><a id="L712" href="#L712">712</a><a id="L713" href="#L713">713</a><a id="L714" href="#L714">714</a><a id="L715" href="#L715">715</a><a id="L716" href="#L716">716</a><a id="L717" href="#L717">717</a><a id="L718" href="#L718">718</a><a id="L719" href="#L719">719</a><a id="L720" href="#L720">720</a><a id="L721" href="#L721">721</a><a id="L722" href="#L722">722</a><a id="L723" href="#L723">723</a><a id="L724" href="#L724">724</a><a id="L725" href="#L725">725</a><a id="L726" href="#L726">726</a><a id="L727" href="#L727">727</a><a id="L728" href="#L728">728</a><a id="L729" href="#L729">729</a><a id="L730" href="#L730">730</a><a id="L731" href="#L731">731</a><a id="L732" href="#L732">732</a><a id="L733" href="#L733">733</a><a id="L734" href="#L734">734</a><a id="L735" href="#L735">735</a><a id="L736" href="#L736">736</a><a id="L737" href="#L737">737</a><a id="L738" href="#L738">738</a><a id="L739" href="#L739">739</a><a id="L740" href="#L740">740</a><a id="L741" href="#L741">741</a><a id="L742" href="#L742">742</a><a id="L743" href="#L743">743</a><a id="L744" href="#L744">744</a><a id="L745" href="#L745">745</a><a id="L746" href="#L746">746</a><a id="L747" href="#L747">747</a><a id="L748" href="#L748">748</a><a id="L749" href="#L749">749</a><a id="L750" href="#L750">750</a><a id="L751" href="#L751">751</a><a id="L752" href="#L752">752</a><a id="L753" href="#L753">753</a><a id="L754" href="#L754">754</a><a id="L755" href="#L755">755</a><a id="L756" href="#L756">756</a><a id="L757" href="#L757">757</a><a id="L758" href="#L758">758</a><a id="L759" href="#L759">759</a><a id="L760" href="#L760">760</a><a id="L761" href="#L761">761</a><a id="L762" href="#L762">762</a><a id="L763" href="#L763">763</a><a id="L764" href="#L764">764</a><a id="L765" href="#L765">765</a><a id="L766" href="#L766">766</a><a id="L767" href="#L767">767</a><a id="L768" href="#L768">768</a><a id="L769" href="#L769">769</a><a id="L770" href="#L770">770</a><a id="L771" href="#L771">771</a><a id="L772" href="#L772">772</a><a id="L773" href="#L773">773</a><a id="L774" href="#L774">774</a><a id="L775" href="#L775">775</a><a id="L776" href="#L776">776</a><a id="L777" href="#L777">777</a><a id="L778" href="#L778">778</a><a id="L779" href="#L779">779</a><a id="L780" href="#L780">780</a><a id="L781" href="#L781">781</a><a id="L782" href="#L782">782</a><a id="L783" href="#L783">783</a><a id="L784" href="#L784">784</a><a id="L785" href="#L785">785</a><a id="L786" href="#L786">786</a><a id="L787" href="#L787">787</a><a id="L788" href="#L788">788</a><a id="L789" href="#L789">789</a><a id="L790" href="#L790">790</a><a id="L791" href="#L791">791</a><a id="L792" href="#L792">792</a><a id="L793" href="#L793">793</a><a id="L794" href="#L794">794</a><a id="L795" href="#L795">795</a><a id="L796" href="#L796">796</a><a id="L797" href="#L797">797</a><a id="L798" href="#L798">798</a><a id="L799" href="#L799">799</a><a id="L800" href="#L800">800</a><a id="L801" href="#L801">801</a><a id="L802" href="#L802">802</a><a id="L803" href="#L803">803</a><a id="L804" href="#L804">804</a><a id="L805" href="#L805">805</a><a id="L806" href="#L806">806</a><a id="L807" href="#L807">807</a><a id="L808" href="#L808">808</a><a id="L809" href="#L809">809</a><a id="L810" href="#L810">810</a><a id="L811" href="#L811">811</a><a id="L812" href="#L812">812</a><a id="L813" href="#L813">813</a><a id="L814" href="#L814">814</a><a id="L815" href="#L815">815</a><a id="L816" href="#L816">816</a><a id="L817" href="#L817">817</a><a id="L818" href="#L818">818</a><a id="L819" href="#L819">819</a><a id="L820" href="#L820">820</a><a id="L821" href="#L821">821</a><a id="L822" href="#L822">822</a><a id="L823" href="#L823">823</a><a id="L824" href="#L824">824</a><a id="L825" href="#L825">825</a><a id="L826" href="#L826">826</a><a id="L827" href="#L827">827</a><a id="L828" href="#L828">828</a><a id="L829" href="#L829">829</a><a id="L830" href="#L830">830</a><a id="L831" href="#L831">831</a><a id="L832" href="#L832">832</a><a id="L833" href="#L833">833</a><a id="L834" href="#L834">834</a><a id="L835" href="#L835">835</a><a id="L836" href="#L836">836</a><a id="L837" href="#L837">837</a><a id="L838" href="#L838">838</a><a id="L839" href="#L839">839</a><a id="L840" href="#L840">840</a><a id="L841" href="#L841">841</a><a id="L842" href="#L842">842</a><a id="L843" href="#L843">843</a><a id="L844" href="#L844">844</a><a id="L845" href="#L845">845</a><a id="L846" href="#L846">846</a><a id="L847" href="#L847">847</a><a id="L848" href="#L848">848</a><a id="L849" href="#L849">849</a><a id="L850" href="#L850">850</a><a id="L851" href="#L851">851</a><a id="L852" href="#L852">852</a><a id="L853" href="#L853">853</a><a id="L854" href="#L854">854</a><a id="L855" href="#L855">855</a><a id="L856" href="#L856">856</a><a id="L857" href="#L857">857</a><a id="L858" href="#L858">858</a><a id="L859" href="#L859">859</a><a id="L860" href="#L860">860</a><a id="L861" href="#L861">861</a><a id="L862" href="#L862">862</a><a id="L863" href="#L863">863</a><a id="L864" href="#L864">864</a><a id="L865" href="#L865">865</a><a id="L866" href="#L866">866</a><a id="L867" href="#L867">867</a><a id="L868" href="#L868">868</a><a id="L869" href="#L869">869</a><a id="L870" href="#L870">870</a><a id="L871" href="#L871">871</a><a id="L872" href="#L872">872</a><a id="L873" href="#L873">873</a><a id="L874" href="#L874">874</a><a id="L875" href="#L875">875</a><a id="L876" href="#L876">876</a><a id="L877" href="#L877">877</a><a id="L878" href="#L878">878</a><a id="L879" href="#L879">879</a><a id="L880" href="#L880">880</a><a id="L881" href="#L881">881</a><a id="L882" href="#L882">882</a><a id="L883" href="#L883">883</a><a id="L884" href="#L884">884</a><a id="L885" href="#L885">885</a><a id="L886" href="#L886">886</a><a id="L887" href="#L887">887</a><a id="L888" href="#L888">888</a><a id="L889" href="#L889">889</a><a id="L890" href="#L890">890</a><a id="L891" href="#L891">891</a><a id="L892" href="#L892">892</a><a id="L893" href="#L893">893</a><a id="L894" href="#L894">894</a><a id="L895" href="#L895">895</a><a id="L896" href="#L896">896</a><a id="L897" href="#L897">897</a><a id="L898" href="#L898">898</a><a id="L899" href="#L899">899</a><a id="L900" href="#L900">900</a><a id="L901" href="#L901">901</a><a id="L902" href="#L902">902</a><a id="L903" href="#L903">903</a><a id="L904" href="#L904">904</a><a id="L905" href="#L905">905</a><a id="L906" href="#L906">906</a><a id="L907" href="#L907">907</a><a id="L908" href="#L908">908</a><a id="L909" href="#L909">909</a><a id="L910" href="#L910">910</a><a id="L911" href="#L911">911</a><a id="L912" href="#L912">912</a><a id="L913" href="#L913">913</a><a id="L914" href="#L914">914</a><a id="L915" href="#L915">915</a><a id="L916" href="#L916">916</a><a id="L917" href="#L917">917</a><a id="L918" href="#L918">918</a><a id="L919" href="#L919">919</a><a id="L920" href="#L920">920</a><a id="L921" href="#L921">921</a><a id="L922" href="#L922">922</a><a id="L923" href="#L923">923</a><a id="L924" href="#L924">924</a><a id="L925" href="#L925">925</a><a id="L926" href="#L926">926</a><a id="L927" href="#L927">927</a><a id="L928" href="#L928">928</a><a id="L929" href="#L929">929</a><a id="L930" href="#L930">930</a><a id="L931" href="#L931">931</a><a id="L932" href="#L932">932</a><a id="L933" href="#L933">933</a><a id="L934" href="#L934">934</a><a id="L935" href="#L935">935</a><a id="L936" href="#L936">936</a><a id="L937" href="#L937">937</a><a id="L938" href="#L938">938</a><a id="L939" href="#L939">939</a><a id="L940" href="#L940">940</a><a id="L941" href="#L941">941</a><a id="L942" href="#L942">942</a><a id="L943" href="#L943">943</a><a id="L944" href="#L944">944</a><a id="L945" href="#L945">945</a><a id="L946" href="#L946">946</a><a id="L947" href="#L947">947</a><a id="L948" href="#L948">948</a><a id="L949" href="#L949">949</a><a id="L950" href="#L950">950</a><a id="L951" href="#L951">951</a><a id="L952" href="#L952">952</a><a id="L953" href="#L953">953</a><a id="L954" href="#L954">954</a><a id="L955" href="#L955">955</a><a id="L956" href="#L956">956</a><a id="L957" href="#L957">957</a><a id="L958" href="#L958">958</a><a id="L959" href="#L959">959</a><a id="L960" href="#L960">960</a><a id="L961" href="#L961">961</a><a id="L962" href="#L962">962</a><a id="L963" href="#L963">963</a><a id="L964" href="#L964">964</a><a id="L965" href="#L965">965</a><a id="L966" href="#L966">966</a><a id="L967" href="#L967">967</a><a id="L968" href="#L968">968</a><a id="L969" href="#L969">969</a><a id="L970" href="#L970">970</a><a id="L971" href="#L971">971</a><a id="L972" href="#L972">972</a><a id="L973" href="#L973">973</a><a id="L974" href="#L974">974</a><a id="L975" href="#L975">975</a><a id="L976" href="#L976">976</a><a id="L977" href="#L977">977</a><a id="L978" href="#L978">978</a><a id="L979" href="#L979">979</a><a id="L980" href="#L980">980</a><a id="L981" href="#L981">981</a><a id="L982" href="#L982">982</a><a id="L983" href="#L983">983</a><a id="L984" href="#L984">984</a><a id="L985" href="#L985">985</a><a id="L986" href="#L986">986</a><a id="L987" href="#L987">987</a><a id="L988" href="#L988">988</a><a id="L989" href="#L989">989</a><a id="L990" href="#L990">990</a><a id="L991" href="#L991">991</a><a id="L992" href="#L992">992</a><a id="L993" href="#L993">993</a><a id="L994" href="#L994">994</a><a id="L995" href="#L995">995</a><a id="L996" href="#L996">996</a><a id="L997" href="#L997">997</a><a id="L998" href="#L998">998</a><a id="L999" href="#L999">999</a><a id="L1000" href="#L1000">1000</a><a id="L1001" href="#L1001">1001</a><a id="L1002" href="#L1002">1002</a><a id="L1003" href="#L1003">1003</a><a id="L1004" href="#L1004">1004</a><a id="L1005" href="#L1005">1005</a><a id="L1006" href="#L1006">1006</a><a id="L1007" href="#L1007">1007</a><a id="L1008" href="#L1008">1008</a><a id="L1009" href="#L1009">1009</a><a id="L1010" href="#L1010">1010</a><a id="L1011" href="#L1011">1011</a><a id="L1012" href="#L1012">1012</a><a id="L1013" href="#L1013">1013</a><a id="L1014" href="#L1014">1014</a><a id="L1015" href="#L1015">1015</a><a id="L1016" href="#L1016">1016</a><a id="L1017" href="#L1017">1017</a><a id="L1018" href="#L1018">1018</a><a id="L1019" href="#L1019">1019</a><a id="L1020" href="#L1020">1020</a><a id="L1021" href="#L1021">1021</a><a id="L1022" href="#L1022">1022</a><a id="L1023" href="#L1023">1023</a><a id="L1024" href="#L1024">1024</a><a id="L1025" href="#L1025">1025</a><a id="L1026" href="#L1026">1026</a><a id="L1027" href="#L1027">1027</a><a id="L1028" href="#L1028">1028</a><a id="L1029" href="#L1029">1029</a><a id="L1030" href="#L1030">1030</a><a id="L1031" href="#L1031">1031</a><a id="L1032" href="#L1032">1032</a><a id="L1033" href="#L1033">1033</a><a id="L1034" href="#L1034">1034</a><a id="L1035" href="#L1035">1035</a><a id="L1036" href="#L1036">1036</a><a id="L1037" href="#L1037">1037</a><a id="L1038" href="#L1038">1038</a><a id="L1039" href="#L1039">1039</a><a id="L1040" href="#L1040">1040</a><a id="L1041" href="#L1041">1041</a><a id="L1042" href="#L1042">1042</a><a id="L1043" href="#L1043">1043</a><a id="L1044" href="#L1044">1044</a><a id="L1045" href="#L1045">1045</a><a id="L1046" href="#L1046">1046</a><a id="L1047" href="#L1047">1047</a><a id="L1048" href="#L1048">1048</a><a id="L1049" href="#L1049">1049</a><a id="L1050" href="#L1050">1050</a><a id="L1051" href="#L1051">1051</a><a id="L1052" href="#L1052">1052</a><a id="L1053" href="#L1053">1053</a><a id="L1054" href="#L1054">1054</a><a id="L1055" href="#L1055">1055</a><a id="L1056" href="#L1056">1056</a><a id="L1057" href="#L1057">1057</a><a id="L1058" href="#L1058">1058</a><a id="L1059" href="#L1059">1059</a><a id="L1060" href="#L1060">1060</a><a id="L1061" href="#L1061">1061</a><a id="L1062" href="#L1062">1062</a><a id="L1063" href="#L1063">1063</a><a id="L1064" href="#L1064">1064</a><a id="L1065" href="#L1065">1065</a><a id="L1066" href="#L1066">1066</a><a id="L1067" href="#L1067">1067</a><a id="L1068" href="#L1068">1068</a><a id="L1069" href="#L1069">1069</a><a id="L1070" href="#L1070">1070</a><a id="L1071" href="#L1071">1071</a><a id="L1072" href="#L1072">1072</a><a id="L1073" href="#L1073">1073</a><a id="L1074" href="#L1074">1074</a><a id="L1075" href="#L1075">1075</a><a id="L1076" href="#L1076">1076</a><a id="L1077" href="#L1077">1077</a><a id="L1078" href="#L1078">1078</a><a id="L1079" href="#L1079">1079</a><a id="L1080" href="#L1080">1080</a><a id="L1081" href="#L1081">1081</a><a id="L1082" href="#L1082">1082</a><a id="L1083" href="#L1083">1083</a><a id="L1084" href="#L1084">1084</a><a id="L1085" href="#L1085">1085</a><a id="L1086" href="#L1086">1086</a><a id="L1087" href="#L1087">1087</a><a id="L1088" href="#L1088">1088</a><a id="L1089" href="#L1089">1089</a><a id="L1090" href="#L1090">1090</a><a id="L1091" href="#L1091">1091</a><a id="L1092" href="#L1092">1092</a><a id="L1093" href="#L1093">1093</a><a id="L1094" href="#L1094">1094</a><a id="L1095" href="#L1095">1095</a><a id="L1096" href="#L1096">1096</a><a id="L1097" href="#L1097">1097</a><a id="L1098" href="#L1098">1098</a><a id="L1099" href="#L1099">1099</a><a id="L1100" href="#L1100">1100</a><a id="L1101" href="#L1101">1101</a><a id="L1102" href="#L1102">1102</a><a id="L1103" href="#L1103">1103</a><a id="L1104" href="#L1104">1104</a><a id="L1105" href="#L1105">1105</a><a id="L1106" href="#L1106">1106</a><a id="L1107" href="#L1107">1107</a><a id="L1108" href="#L1108">1108</a><a id="L1109" href="#L1109">1109</a><a id="L1110" href="#L1110">1110</a><a id="L1111" href="#L1111">1111</a><a id="L1112" href="#L1112">1112</a><a id="L1113" href="#L1113">1113</a><a id="L1114" href="#L1114">1114</a><a id="L1115" href="#L1115">1115</a><a id="L1116" href="#L1116">1116</a><a id="L1117" href="#L1117">1117</a><a id="L1118" href="#L1118">1118</a><a id="L1119" href="#L1119">1119</a><a id="L1120" href="#L1120">1120</a><a id="L1121" href="#L1121">1121</a><a id="L1122" href="#L1122">1122</a><a id="L1123" href="#L1123">1123</a><a id="L1124" href="#L1124">1124</a><a id="L1125" href="#L1125">1125</a><a id="L1126" href="#L1126">1126</a><a id="L1127" href="#L1127">1127</a><a id="L1128" href="#L1128">1128</a><a id="L1129" href="#L1129">1129</a><a id="L1130" href="#L1130">1130</a><a id="L1131" href="#L1131">1131</a><a id="L1132" href="#L1132">1132</a><a id="L1133" href="#L1133">1133</a><a id="L1134" href="#L1134">1134</a><a id="L1135" href="#L1135">1135</a><a id="L1136" href="#L1136">1136</a><a id="L1137" href="#L1137">1137</a><a id="L1138" href="#L1138">1138</a><a id="L1139" href="#L1139">1139</a><a id="L1140" href="#L1140">1140</a><a id="L1141" href="#L1141">1141</a><a id="L1142" href="#L1142">1142</a><a id="L1143" href="#L1143">1143</a><a id="L1144" href="#L1144">1144</a><a id="L1145" href="#L1145">1145</a><a id="L1146" href="#L1146">1146</a><a id="L1147" href="#L1147">1147</a><a id="L1148" href="#L1148">1148</a><a id="L1149" href="#L1149">1149</a><a id="L1150" href="#L1150">1150</a><a id="L1151" href="#L1151">1151</a><a id="L1152" href="#L1152">1152</a><a id="L1153" href="#L1153">1153</a><a id="L1154" href="#L1154">1154</a><a id="L1155" href="#L1155">1155</a><a id="L1156" href="#L1156">1156</a><a id="L1157" href="#L1157">1157</a><a id="L1158" href="#L1158">1158</a><a id="L1159" href="#L1159">1159</a><a id="L1160" href="#L1160">1160</a><a id="L1161" href="#L1161">1161</a><a id="L1162" href="#L1162">1162</a><a id="L1163" href="#L1163">1163</a><a id="L1164" href="#L1164">1164</a><a id="L1165" href="#L1165">1165</a><a id="L1166" href="#L1166">1166</a><a id="L1167" href="#L1167">1167</a><a id="L1168" href="#L1168">1168</a><a id="L1169" href="#L1169">1169</a><a id="L1170" href="#L1170">1170</a><a id="L1171" href="#L1171">1171</a><a id="L1172" href="#L1172">1172</a><a id="L1173" href="#L1173">1173</a><a id="L1174" href="#L1174">1174</a><a id="L1175" href="#L1175">1175</a><a id="L1176" href="#L1176">1176</a><a id="L1177" href="#L1177">1177</a><a id="L1178" href="#L1178">1178</a><a id="L1179" href="#L1179">1179</a><a id="L1180" href="#L1180">1180</a><a id="L1181" href="#L1181">1181</a><a id="L1182" href="#L1182">1182</a><a id="L1183" href="#L1183">1183</a><a id="L1184" href="#L1184">1184</a><a id="L1185" href="#L1185">1185</a><a id="L1186" href="#L1186">1186</a><a id="L1187" href="#L1187">1187</a><a id="L1188" href="#L1188">1188</a><a id="L1189" href="#L1189">1189</a><a id="L1190" href="#L1190">1190</a><a id="L1191" href="#L1191">1191</a><a id="L1192" href="#L1192">1192</a><a id="L1193" href="#L1193">1193</a><a id="L1194" href="#L1194">1194</a><a id="L1195" href="#L1195">1195</a><a id="L1196" href="#L1196">1196</a><a id="L1197" href="#L1197">1197</a><a id="L1198" href="#L1198">1198</a><a id="L1199" href="#L1199">1199</a><a id="L1200" href="#L1200">1200</a><a id="L1201" href="#L1201">1201</a><a id="L1202" href="#L1202">1202</a><a id="L1203" href="#L1203">1203</a><a id="L1204" href="#L1204">1204</a><a id="L1205" href="#L1205">1205</a><a id="L1206" href="#L1206">1206</a><a id="L1207" href="#L1207">1207</a><a id="L1208" href="#L1208">1208</a><a id="L1209" href="#L1209">1209</a><a id="L1210" href="#L1210">1210</a><a id="L1211" href="#L1211">1211</a><a id="L1212" href="#L1212">1212</a><a id="L1213" href="#L1213">1213</a><a id="L1214" href="#L1214">1214</a><a id="L1215" href="#L1215">1215</a><a id="L1216" href="#L1216">1216</a><a id="L1217" href="#L1217">1217</a><a id="L1218" href="#L1218">1218</a><a id="L1219" href="#L1219">1219</a><a id="L1220" href="#L1220">1220</a><a id="L1221" href="#L1221">1221</a><a id="L1222" href="#L1222">1222</a><a id="L1223" href="#L1223">1223</a><a id="L1224" href="#L1224">1224</a><a id="L1225" href="#L1225">1225</a><a id="L1226" href="#L1226">1226</a><a id="L1227" href="#L1227">1227</a><a id="L1228" href="#L1228">1228</a><a id="L1229" href="#L1229">1229</a><a id="L1230" href="#L1230">1230</a><a id="L1231" href="#L1231">1231</a><a id="L1232" href="#L1232">1232</a><a id="L1233" href="#L1233">1233</a><a id="L1234" href="#L1234">1234</a><a id="L1235" href="#L1235">1235</a><a id="L1236" href="#L1236">1236</a><a id="L1237" href="#L1237">1237</a><a id="L1238" href="#L1238">1238</a><a id="L1239" href="#L1239">1239</a><a id="L1240" href="#L1240">1240</a><a id="L1241" href="#L1241">1241</a><a id="L1242" href="#L1242">1242</a><a id="L1243" href="#L1243">1243</a><a id="L1244" href="#L1244">1244</a><a id="L1245" href="#L1245">1245</a><a id="L1246" href="#L1246">1246</a><a id="L1247" href="#L1247">1247</a><a id="L1248" href="#L1248">1248</a><a id="L1249" href="#L1249">1249</a><a id="L1250" href="#L1250">1250</a><a id="L1251" href="#L1251">1251</a><a id="L1252" href="#L1252">1252</a><a id="L1253" href="#L1253">1253</a><a id="L1254" href="#L1254">1254</a><a id="L1255" href="#L1255">1255</a><a id="L1256" href="#L1256">1256</a><a id="L1257" href="#L1257">1257</a><a id="L1258" href="#L1258">1258</a><a id="L1259" href="#L1259">1259</a><a id="L1260" href="#L1260">1260</a><a id="L1261" href="#L1261">1261</a><a id="L1262" href="#L1262">1262</a><a id="L1263" href="#L1263">1263</a><a id="L1264" href="#L1264">1264</a><a id="L1265" href="#L1265">1265</a><a id="L1266" href="#L1266">1266</a><a id="L1267" href="#L1267">1267</a><a id="L1268" href="#L1268">1268</a><a id="L1269" href="#L1269">1269</a><a id="L1270" href="#L1270">1270</a><a id="L1271" href="#L1271">1271</a><a id="L1272" href="#L1272">1272</a><a id="L1273" href="#L1273">1273</a><a id="L1274" href="#L1274">1274</a><a id="L1275" href="#L1275">1275</a><a id="L1276" href="#L1276">1276</a><a id="L1277" href="#L1277">1277</a><a id="L1278" href="#L1278">1278</a><a id="L1279" href="#L1279">1279</a><a id="L1280" href="#L1280">1280</a><a id="L1281" href="#L1281">1281</a><a id="L1282" href="#L1282">1282</a><a id="L1283" href="#L1283">1283</a><a id="L1284" href="#L1284">1284</a><a id="L1285" href="#L1285">1285</a><a id="L1286" href="#L1286">1286</a><a id="L1287" href="#L1287">1287</a><a id="L1288" href="#L1288">1288</a><a id="L1289" href="#L1289">1289</a><a id="L1290" href="#L1290">1290</a><a id="L1291" href="#L1291">1291</a><a id="L1292" href="#L1292">1292</a><a id="L1293" href="#L1293">1293</a><a id="L1294" href="#L1294">1294</a><a id="L1295" href="#L1295">1295</a><a id="L1296" href="#L1296">1296</a><a id="L1297" href="#L1297">1297</a><a id="L1298" href="#L1298">1298</a><a id="L1299" href="#L1299">1299</a><a id="L1300" href="#L1300">1300</a><a id="L1301" href="#L1301">1301</a><a id="L1302" href="#L1302">1302</a><a id="L1303" href="#L1303">1303</a><a id="L1304" href="#L1304">1304</a><a id="L1305" href="#L1305">1305</a><a id="L1306" href="#L1306">1306</a><a id="L1307" href="#L1307">1307</a><a id="L1308" href="#L1308">1308</a><a id="L1309" href="#L1309">1309</a><a id="L1310" href="#L1310">1310</a><a id="L1311" href="#L1311">1311</a><a id="L1312" href="#L1312">1312</a><a id="L1313" href="#L1313">1313</a><a id="L1314" href="#L1314">1314</a><a id="L1315" href="#L1315">1315</a><a id="L1316" href="#L1316">1316</a><a id="L1317" href="#L1317">1317</a><a id="L1318" href="#L1318">1318</a><a id="L1319" href="#L1319">1319</a><a id="L1320" href="#L1320">1320</a><a id="L1321" href="#L1321">1321</a><a id="L1322" href="#L1322">1322</a><a id="L1323" href="#L1323">1323</a><a id="L1324" href="#L1324">1324</a><a id="L1325" href="#L1325">1325</a><a id="L1326" href="#L1326">1326</a><a id="L1327" href="#L1327">1327</a><a id="L1328" href="#L1328">1328</a><a id="L1329" href="#L1329">1329</a><a id="L1330" href="#L1330">1330</a><a id="L1331" href="#L1331">1331</a><a id="L1332" href="#L1332">1332</a><a id="L1333" href="#L1333">1333</a><a id="L1334" href="#L1334">1334</a><a id="L1335" href="#L1335">1335</a><a id="L1336" href="#L1336">1336</a><a id="L1337" href="#L1337">1337</a><a id="L1338" href="#L1338">1338</a><a id="L1339" href="#L1339">1339</a><a id="L1340" href="#L1340">1340</a><a id="L1341" href="#L1341">1341</a><a id="L1342" href="#L1342">1342</a><a id="L1343" href="#L1343">1343</a><a id="L1344" href="#L1344">1344</a><a id="L1345" href="#L1345">1345</a><a id="L1346" href="#L1346">1346</a><a id="L1347" href="#L1347">1347</a><a id="L1348" href="#L1348">1348</a><a id="L1349" href="#L1349">1349</a><a id="L1350" href="#L1350">1350</a><a id="L1351" href="#L1351">1351</a><a id="L1352" href="#L1352">1352</a><a id="L1353" href="#L1353">1353</a><a id="L1354" href="#L1354">1354</a><a id="L1355" href="#L1355">1355</a><a id="L1356" href="#L1356">1356</a><a id="L1357" href="#L1357">1357</a><a id="L1358" href="#L1358">1358</a><a id="L1359" href="#L1359">1359</a><a id="L1360" href="#L1360">1360</a><a id="L1361" href="#L1361">1361</a><a id="L1362" href="#L1362">1362</a><a id="L1363" href="#L1363">1363</a><a id="L1364" href="#L1364">1364</a><a id="L1365" href="#L1365">1365</a><a id="L1366" href="#L1366">1366</a><a id="L1367" href="#L1367">1367</a><a id="L1368" href="#L1368">1368</a><a id="L1369" href="#L1369">1369</a><a id="L1370" href="#L1370">1370</a><a id="L1371" href="#L1371">1371</a><a id="L1372" href="#L1372">1372</a><a id="L1373" href="#L1373">1373</a><a id="L1374" href="#L1374">1374</a><a id="L1375" href="#L1375">1375</a><a id="L1376" href="#L1376">1376</a><a id="L1377" href="#L1377">1377</a><a id="L1378" href="#L1378">1378</a><a id="L1379" href="#L1379">1379</a><a id="L1380" href="#L1380">1380</a><a id="L1381" href="#L1381">1381</a><a id="L1382" href="#L1382">1382</a><a id="L1383" href="#L1383">1383</a><a id="L1384" href="#L1384">1384</a><a id="L1385" href="#L1385">1385</a><a id="L1386" href="#L1386">1386</a><a id="L1387" href="#L1387">1387</a><a id="L1388" href="#L1388">1388</a><a id="L1389" href="#L1389">1389</a><a id="L1390" href="#L1390">1390</a><a id="L1391" href="#L1391">1391</a><a id="L1392" href="#L1392">1392</a><a id="L1393" href="#L1393">1393</a><a id="L1394" href="#L1394">1394</a><a id="L1395" href="#L1395">1395</a><a id="L1396" href="#L1396">1396</a><a id="L1397" href="#L1397">1397</a><a id="L1398" href="#L1398">1398</a><a id="L1399" href="#L1399">1399</a><a id="L1400" href="#L1400">1400</a><a id="L1401" href="#L1401">1401</a><a id="L1402" href="#L1402">1402</a><a id="L1403" href="#L1403">1403</a><a id="L1404" href="#L1404">1404</a><a id="L1405" href="#L1405">1405</a><a id="L1406" href="#L1406">1406</a><a id="L1407" href="#L1407">1407</a><a id="L1408" href="#L1408">1408</a><a id="L1409" href="#L1409">1409</a><a id="L1410" href="#L1410">1410</a><a id="L1411" href="#L1411">1411</a><a id="L1412" href="#L1412">1412</a><a id="L1413" href="#L1413">1413</a><a id="L1414" href="#L1414">1414</a><a id="L1415" href="#L1415">1415</a><a id="L1416" href="#L1416">1416</a><a id="L1417" href="#L1417">1417</a><a id="L1418" href="#L1418">1418</a><a id="L1419" href="#L1419">1419</a><a id="L1420" href="#L1420">1420</a><a id="L1421" href="#L1421">1421</a><a id="L1422" href="#L1422">1422</a><a id="L1423" href="#L1423">1423</a><a id="L1424" href="#L1424">1424</a><a id="L1425" href="#L1425">1425</a><a id="L1426" href="#L1426">1426</a><a id="L1427" href="#L1427">1427</a><a id="L1428" href="#L1428">1428</a><a id="L1429" href="#L1429">1429</a><a id="L1430" href="#L1430">1430</a><a id="L1431" href="#L1431">1431</a><a id="L1432" href="#L1432">1432</a><a id="L1433" href="#L1433">1433</a><a id="L1434" href="#L1434">1434</a><a id="L1435" href="#L1435">1435</a><a id="L1436" href="#L1436">1436</a><a id="L1437" href="#L1437">1437</a><a id="L1438" href="#L1438">1438</a><a id="L1439" href="#L1439">1439</a><a id="L1440" href="#L1440">1440</a><a id="L1441" href="#L1441">1441</a><a id="L1442" href="#L1442">1442</a><a id="L1443" href="#L1443">1443</a><a id="L1444" href="#L1444">1444</a><a id="L1445" href="#L1445">1445</a><a id="L1446" href="#L1446">1446</a><a id="L1447" href="#L1447">1447</a><a id="L1448" href="#L1448">1448</a><a id="L1449" href="#L1449">1449</a><a id="L1450" href="#L1450">1450</a><a id="L1451" href="#L1451">1451</a><a id="L1452" href="#L1452">1452</a><a id="L1453" href="#L1453">1453</a><a id="L1454" href="#L1454">1454</a><a id="L1455" href="#L1455">1455</a><a id="L1456" href="#L1456">1456</a><a id="L1457" href="#L1457">1457</a><a id="L1458" href="#L1458">1458</a><a id="L1459" href="#L1459">1459</a><a id="L1460" href="#L1460">1460</a><a id="L1461" href="#L1461">1461</a><a id="L1462" href="#L1462">1462</a><a id="L1463" href="#L1463">1463</a><a id="L1464" href="#L1464">1464</a><a id="L1465" href="#L1465">1465</a><a id="L1466" href="#L1466">1466</a><a id="L1467" href="#L1467">1467</a><a id="L1468" href="#L1468">1468</a><a id="L1469" href="#L1469">1469</a><a id="L1470" href="#L1470">1470</a><a id="L1471" href="#L1471">1471</a><a id="L1472" href="#L1472">1472</a><a id="L1473" href="#L1473">1473</a><a id="L1474" href="#L1474">1474</a><a id="L1475" href="#L1475">1475</a><a id="L1476" href="#L1476">1476</a><a id="L1477" href="#L1477">1477</a><a id="L1478" href="#L1478">1478</a><a id="L1479" href="#L1479">1479</a><a id="L1480" href="#L1480">1480</a><a id="L1481" href="#L1481">1481</a><a id="L1482" href="#L1482">1482</a><a id="L1483" href="#L1483">1483</a><a id="L1484" href="#L1484">1484</a><a id="L1485" href="#L1485">1485</a><a id="L1486" href="#L1486">1486</a><a id="L1487" href="#L1487">1487</a><a id="L1488" href="#L1488">1488</a><a id="L1489" href="#L1489">1489</a><a id="L1490" href="#L1490">1490</a><a id="L1491" href="#L1491">1491</a><a id="L1492" href="#L1492">1492</a><a id="L1493" href="#L1493">1493</a><a id="L1494" href="#L1494">1494</a><a id="L1495" href="#L1495">1495</a><a id="L1496" href="#L1496">1496</a><a id="L1497" href="#L1497">1497</a><a id="L1498" href="#L1498">1498</a><a id="L1499" href="#L1499">1499</a><a id="L1500" href="#L1500">1500</a><a id="L1501" href="#L1501">1501</a><a id="L1502" href="#L1502">1502</a><a id="L1503" href="#L1503">1503</a><a id="L1504" href="#L1504">1504</a><a id="L1505" href="#L1505">1505</a><a id="L1506" href="#L1506">1506</a><a id="L1507" href="#L1507">1507</a><a id="L1508" href="#L1508">1508</a><a id="L1509" href="#L1509">1509</a><a id="L1510" href="#L1510">1510</a><a id="L1511" href="#L1511">1511</a><a id="L1512" href="#L1512">1512</a><a id="L1513" href="#L1513">1513</a><a id="L1514" href="#L1514">1514</a><a id="L1515" href="#L1515">1515</a><a id="L1516" href="#L1516">1516</a><a id="L1517" href="#L1517">1517</a><a id="L1518" href="#L1518">1518</a><a id="L1519" href="#L1519">1519</a><a id="L1520" href="#L1520">1520</a><a id="L1521" href="#L1521">1521</a><a id="L1522" href="#L1522">1522</a><a id="L1523" href="#L1523">1523</a><a id="L1524" href="#L1524">1524</a><a id="L1525" href="#L1525">1525</a><a id="L1526" href="#L1526">1526</a><a id="L1527" href="#L1527">1527</a><a id="L1528" href="#L1528">1528</a><a id="L1529" href="#L1529">1529</a><a id="L1530" href="#L1530">1530</a><a id="L1531" href="#L1531">1531</a><a id="L1532" href="#L1532">1532</a><a id="L1533" href="#L1533">1533</a><a id="L1534" href="#L1534">1534</a><a id="L1535" href="#L1535">1535</a><a id="L1536" href="#L1536">1536</a><a id="L1537" href="#L1537">1537</a><a id="L1538" href="#L1538">1538</a><a id="L1539" href="#L1539">1539</a><a id="L1540" href="#L1540">1540</a><a id="L1541" href="#L1541">1541</a><a id="L1542" href="#L1542">1542</a><a id="L1543" href="#L1543">1543</a><a id="L1544" href="#L1544">1544</a><a id="L1545" href="#L1545">1545</a><a id="L1546" href="#L1546">1546</a><a id="L1547" href="#L1547">1547</a><a id="L1548" href="#L1548">1548</a><a id="L1549" href="#L1549">1549</a><a id="L1550" href="#L1550">1550</a><a id="L1551" href="#L1551">1551</a><a id="L1552" href="#L1552">1552</a><a id="L1553" href="#L1553">1553</a><a id="L1554" href="#L1554">1554</a><a id="L1555" href="#L1555">1555</a><a id="L1556" href="#L1556">1556</a><a id="L1557" href="#L1557">1557</a><a id="L1558" href="#L1558">1558</a><a id="L1559" href="#L1559">1559</a><a id="L1560" href="#L1560">1560</a><a id="L1561" href="#L1561">1561</a><a id="L1562" href="#L1562">1562</a><a id="L1563" href="#L1563">1563</a><a id="L1564" href="#L1564">1564</a><a id="L1565" href="#L1565">1565</a><a id="L1566" href="#L1566">1566</a><a id="L1567" href="#L1567">1567</a><a id="L1568" href="#L1568">1568</a><a id="L1569" href="#L1569">1569</a><a id="L1570" href="#L1570">1570</a><a id="L1571" href="#L1571">1571</a><a id="L1572" href="#L1572">1572</a><a id="L1573" href="#L1573">1573</a><a id="L1574" href="#L1574">1574</a><a id="L1575" href="#L1575">1575</a><a id="L1576" href="#L1576">1576</a><a id="L1577" href="#L1577">1577</a><a id="L1578" href="#L1578">1578</a><a id="L1579" href="#L1579">1579</a><a id="L1580" href="#L1580">1580</a><a id="L1581" href="#L1581">1581</a><a id="L1582" href="#L1582">1582</a><a id="L1583" href="#L1583">1583</a><a id="L1584" href="#L1584">1584</a><a id="L1585" href="#L1585">1585</a><a id="L1586" href="#L1586">1586</a><a id="L1587" href="#L1587">1587</a><a id="L1588" href="#L1588">1588</a><a id="L1589" href="#L1589">1589</a><a id="L1590" href="#L1590">1590</a><a id="L1591" href="#L1591">1591</a><a id="L1592" href="#L1592">1592</a><a id="L1593" href="#L1593">1593</a><a id="L1594" href="#L1594">1594</a><a id="L1595" href="#L1595">1595</a><a id="L1596" href="#L1596">1596</a><a id="L1597" href="#L1597">1597</a><a id="L1598" href="#L1598">1598</a><a id="L1599" href="#L1599">1599</a><a id="L1600" href="#L1600">1600</a><a id="L1601" href="#L1601">1601</a><a id="L1602" href="#L1602">1602</a><a id="L1603" href="#L1603">1603</a><a id="L1604" href="#L1604">1604</a><a id="L1605" href="#L1605">1605</a><a id="L1606" href="#L1606">1606</a><a id="L1607" href="#L1607">1607</a><a id="L1608" href="#L1608">1608</a><a id="L1609" href="#L1609">1609</a><a id="L1610" href="#L1610">1610</a><a id="L1611" href="#L1611">1611</a><a id="L1612" href="#L1612">1612</a><a id="L1613" href="#L1613">1613</a><a id="L1614" href="#L1614">1614</a><a id="L1615" href="#L1615">1615</a><a id="L1616" href="#L1616">1616</a><a id="L1617" href="#L1617">1617</a><a id="L1618" href="#L1618">1618</a><a id="L1619" href="#L1619">1619</a><a id="L1620" href="#L1620">1620</a><a id="L1621" href="#L1621">1621</a><a id="L1622" href="#L1622">1622</a><a id="L1623" href="#L1623">1623</a><a id="L1624" href="#L1624">1624</a><a id="L1625" href="#L1625">1625</a><a id="L1626" href="#L1626">1626</a><a id="L1627" href="#L1627">1627</a><a id="L1628" href="#L1628">1628</a><a id="L1629" href="#L1629">1629</a><a id="L1630" href="#L1630">1630</a><a id="L1631" href="#L1631">1631</a><a id="L1632" href="#L1632">1632</a><a id="L1633" href="#L1633">1633</a><a id="L1634" href="#L1634">1634</a><a id="L1635" href="#L1635">1635</a><a id="L1636" href="#L1636">1636</a><a id="L1637" href="#L1637">1637</a><a id="L1638" href="#L1638">1638</a><a id="L1639" href="#L1639">1639</a><a id="L1640" href="#L1640">1640</a><a id="L1641" href="#L1641">1641</a><a id="L1642" href="#L1642">1642</a><a id="L1643" href="#L1643">1643</a><a id="L1644" href="#L1644">1644</a><a id="L1645" href="#L1645">1645</a><a id="L1646" href="#L1646">1646</a><a id="L1647" href="#L1647">1647</a><a id="L1648" href="#L1648">1648</a><a id="L1649" href="#L1649">1649</a><a id="L1650" href="#L1650">1650</a><a id="L1651" href="#L1651">1651</a><a id="L1652" href="#L1652">1652</a><a id="L1653" href="#L1653">1653</a><a id="L1654" href="#L1654">1654</a><a id="L1655" href="#L1655">1655</a><a id="L1656" href="#L1656">1656</a><a id="L1657" href="#L1657">1657</a><a id="L1658" href="#L1658">1658</a><a id="L1659" href="#L1659">1659</a><a id="L1660" href="#L1660">1660</a><a id="L1661" href="#L1661">1661</a><a id="L1662" href="#L1662">1662</a><a id="L1663" href="#L1663">1663</a><a id="L1664" href="#L1664">1664</a><a id="L1665" href="#L1665">1665</a><a id="L1666" href="#L1666">1666</a><a id="L1667" href="#L1667">1667</a><a id="L1668" href="#L1668">1668</a><a id="L1669" href="#L1669">1669</a><a id="L1670" href="#L1670">1670</a><a id="L1671" href="#L1671">1671</a><a id="L1672" href="#L1672">1672</a><a id="L1673" href="#L1673">1673</a><a id="L1674" href="#L1674">1674</a><a id="L1675" href="#L1675">1675</a><a id="L1676" href="#L1676">1676</a><a id="L1677" href="#L1677">1677</a><a id="L1678" href="#L1678">1678</a><a id="L1679" href="#L1679">1679</a><a id="L1680" href="#L1680">1680</a><a id="L1681" href="#L1681">1681</a><a id="L1682" href="#L1682">1682</a><a id="L1683" href="#L1683">1683</a><a id="L1684" href="#L1684">1684</a><a id="L1685" href="#L1685">1685</a><a id="L1686" href="#L1686">1686</a><a id="L1687" href="#L1687">1687</a><a id="L1688" href="#L1688">1688</a><a id="L1689" href="#L1689">1689</a><a id="L1690" href="#L1690">1690</a><a id="L1691" href="#L1691">1691</a><a id="L1692" href="#L1692">1692</a><a id="L1693" href="#L1693">1693</a><a id="L1694" href="#L1694">1694</a><a id="L1695" href="#L1695">1695</a><a id="L1696" href="#L1696">1696</a><a id="L1697" href="#L1697">1697</a><a id="L1698" href="#L1698">1698</a><a id="L1699" href="#L1699">1699</a><a id="L1700" href="#L1700">1700</a><a id="L1701" href="#L1701">1701</a><a id="L1702" href="#L1702">1702</a><a id="L1703" href="#L1703">1703</a><a id="L1704" href="#L1704">1704</a><a id="L1705" href="#L1705">1705</a><a id="L1706" href="#L1706">1706</a><a id="L1707" href="#L1707">1707</a><a id="L1708" href="#L1708">1708</a><a id="L1709" href="#L1709">1709</a><a id="L1710" href="#L1710">1710</a><a id="L1711" href="#L1711">1711</a><a id="L1712" href="#L1712">1712</a><a id="L1713" href="#L1713">1713</a><a id="L1714" href="#L1714">1714</a><a id="L1715" href="#L1715">1715</a><a id="L1716" href="#L1716">1716</a><a id="L1717" href="#L1717">1717</a><a id="L1718" href="#L1718">1718</a><a id="L1719" href="#L1719">1719</a><a id="L1720" href="#L1720">1720</a><a id="L1721" href="#L1721">1721</a><a id="L1722" href="#L1722">1722</a><a id="L1723" href="#L1723">1723</a><a id="L1724" href="#L1724">1724</a><a id="L1725" href="#L1725">1725</a><a id="L1726" href="#L1726">1726</a><a id="L1727" href="#L1727">1727</a><a id="L1728" href="#L1728">1728</a><a id="L1729" href="#L1729">1729</a><a id="L1730" href="#L1730">1730</a><a id="L1731" href="#L1731">1731</a><a id="L1732" href="#L1732">1732</a><a id="L1733" href="#L1733">1733</a><a id="L1734" href="#L1734">1734</a><a id="L1735" href="#L1735">1735</a><a id="L1736" href="#L1736">1736</a><a id="L1737" href="#L1737">1737</a><a id="L1738" href="#L1738">1738</a><a id="L1739" href="#L1739">1739</a><a id="L1740" href="#L1740">1740</a><a id="L1741" href="#L1741">1741</a><a id="L1742" href="#L1742">1742</a><a id="L1743" href="#L1743">1743</a><a id="L1744" href="#L1744">1744</a><a id="L1745" href="#L1745">1745</a><a id="L1746" href="#L1746">1746</a><a id="L1747" href="#L1747">1747</a><a id="L1748" href="#L1748">1748</a><a id="L1749" href="#L1749">1749</a><a id="L1750" href="#L1750">1750</a><a id="L1751" href="#L1751">1751</a><a id="L1752" href="#L1752">1752</a><a id="L1753" href="#L1753">1753</a><a id="L1754" href="#L1754">1754</a><a id="L1755" href="#L1755">1755</a><a id="L1756" href="#L1756">1756</a><a id="L1757" href="#L1757">1757</a><a id="L1758" href="#L1758">1758</a><a id="L1759" href="#L1759">1759</a><a id="L1760" href="#L1760">1760</a><a id="L1761" href="#L1761">1761</a><a id="L1762" href="#L1762">1762</a><a id="L1763" href="#L1763">1763</a><a id="L1764" href="#L1764">1764</a><a id="L1765" href="#L1765">1765</a><a id="L1766" href="#L1766">1766</a><a id="L1767" href="#L1767">1767</a><a id="L1768" href="#L1768">1768</a><a id="L1769" href="#L1769">1769</a><a id="L1770" href="#L1770">1770</a><a id="L1771" href="#L1771">1771</a><a id="L1772" href="#L1772">1772</a><a id="L1773" href="#L1773">1773</a><a id="L1774" href="#L1774">1774</a><a id="L1775" href="#L1775">1775</a><a id="L1776" href="#L1776">1776</a><a id="L1777" href="#L1777">1777</a><a id="L1778" href="#L1778">1778</a><a id="L1779" href="#L1779">1779</a><a id="L1780" href="#L1780">1780</a><a id="L1781" href="#L1781">1781</a><a id="L1782" href="#L1782">1782</a><a id="L1783" href="#L1783">1783</a><a id="L1784" href="#L1784">1784</a><a id="L1785" href="#L1785">1785</a><a id="L1786" href="#L1786">1786</a><a id="L1787" href="#L1787">1787</a><a id="L1788" href="#L1788">1788</a><a id="L1789" href="#L1789">1789</a><a id="L1790" href="#L1790">1790</a><a id="L1791" href="#L1791">1791</a><a id="L1792" href="#L1792">1792</a><a id="L1793" href="#L1793">1793</a><a id="L1794" href="#L1794">1794</a><a id="L1795" href="#L1795">1795</a><a id="L1796" href="#L1796">1796</a><a id="L1797" href="#L1797">1797</a><a id="L1798" href="#L1798">1798</a><a id="L1799" href="#L1799">1799</a><a id="L1800" href="#L1800">1800</a><a id="L1801" href="#L1801">1801</a><a id="L1802" href="#L1802">1802</a><a id="L1803" href="#L1803">1803</a><a id="L1804" href="#L1804">1804</a><a id="L1805" href="#L1805">1805</a><a id="L1806" href="#L1806">1806</a><a id="L1807" href="#L1807">1807</a><a id="L1808" href="#L1808">1808</a><a id="L1809" href="#L1809">1809</a><a id="L1810" href="#L1810">1810</a><a id="L1811" href="#L1811">1811</a><a id="L1812" href="#L1812">1812</a><a id="L1813" href="#L1813">1813</a><a id="L1814" href="#L1814">1814</a><a id="L1815" href="#L1815">1815</a><a id="L1816" href="#L1816">1816</a><a id="L1817" href="#L1817">1817</a><a id="L1818" href="#L1818">1818</a><a id="L1819" href="#L1819">1819</a><a id="L1820" href="#L1820">1820</a><a id="L1821" href="#L1821">1821</a><a id="L1822" href="#L1822">1822</a><a id="L1823" href="#L1823">1823</a><a id="L1824" href="#L1824">1824</a><a id="L1825" href="#L1825">1825</a><a id="L1826" href="#L1826">1826</a><a id="L1827" href="#L1827">1827</a><a id="L1828" href="#L1828">1828</a><a id="L1829" href="#L1829">1829</a><a id="L1830" href="#L1830">1830</a><a id="L1831" href="#L1831">1831</a><a id="L1832" href="#L1832">1832</a><a id="L1833" href="#L1833">1833</a><a id="L1834" href="#L1834">1834</a><a id="L1835" href="#L1835">1835</a><a id="L1836" href="#L1836">1836</a><a id="L1837" href="#L1837">1837</a><a id="L1838" href="#L1838">1838</a><a id="L1839" href="#L1839">1839</a><a id="L1840" href="#L1840">1840</a><a id="L1841" href="#L1841">1841</a><a id="L1842" href="#L1842">1842</a><a id="L1843" href="#L1843">1843</a><a id="L1844" href="#L1844">1844</a><a id="L1845" href="#L1845">1845</a><a id="L1846" href="#L1846">1846</a><a id="L1847" href="#L1847">1847</a><a id="L1848" href="#L1848">1848</a><a id="L1849" href="#L1849">1849</a><a id="L1850" href="#L1850">1850</a><a id="L1851" href="#L1851">1851</a><a id="L1852" href="#L1852">1852</a><a id="L1853" href="#L1853">1853</a><a id="L1854" href="#L1854">1854</a><a id="L1855" href="#L1855">1855</a><a id="L1856" href="#L1856">1856</a><a id="L1857" href="#L1857">1857</a><a id="L1858" href="#L1858">1858</a><a id="L1859" href="#L1859">1859</a><a id="L1860" href="#L1860">1860</a><a id="L1861" href="#L1861">1861</a><a id="L1862" href="#L1862">1862</a><a id="L1863" href="#L1863">1863</a><a id="L1864" href="#L1864">1864</a><a id="L1865" href="#L1865">1865</a><a id="L1866" href="#L1866">1866</a><a id="L1867" href="#L1867">1867</a><a id="L1868" href="#L1868">1868</a><a id="L1869" href="#L1869">1869</a><a id="L1870" href="#L1870">1870</a><a id="L1871" href="#L1871">1871</a><a id="L1872" href="#L1872">1872</a><a id="L1873" href="#L1873">1873</a><a id="L1874" href="#L1874">1874</a><a id="L1875" href="#L1875">1875</a><a id="L1876" href="#L1876">1876</a><a id="L1877" href="#L1877">1877</a><a id="L1878" href="#L1878">1878</a><a id="L1879" href="#L1879">1879</a><a id="L1880" href="#L1880">1880</a><a id="L1881" href="#L1881">1881</a><a id="L1882" href="#L1882">1882</a><a id="L1883" href="#L1883">1883</a><a id="L1884" href="#L1884">1884</a><a id="L1885" href="#L1885">1885</a><a id="L1886" href="#L1886">1886</a><a id="L1887" href="#L1887">1887</a><a id="L1888" href="#L1888">1888</a><a id="L1889" href="#L1889">1889</a><a id="L1890" href="#L1890">1890</a><a id="L1891" href="#L1891">1891</a><a id="L1892" href="#L1892">1892</a><a id="L1893" href="#L1893">1893</a><a id="L1894" href="#L1894">1894</a><a id="L1895" href="#L1895">1895</a><a id="L1896" href="#L1896">1896</a><a id="L1897" href="#L1897">1897</a><a id="L1898" href="#L1898">1898</a><a id="L1899" href="#L1899">1899</a><a id="L1900" href="#L1900">1900</a><a id="L1901" href="#L1901">1901</a><a id="L1902" href="#L1902">1902</a><a id="L1903" href="#L1903">1903</a><a id="L1904" href="#L1904">1904</a><a id="L1905" href="#L1905">1905</a><a id="L1906" href="#L1906">1906</a><a id="L1907" href="#L1907">1907</a><a id="L1908" href="#L1908">1908</a><a id="L1909" href="#L1909">1909</a><a id="L1910" href="#L1910">1910</a><a id="L1911" href="#L1911">1911</a><a id="L1912" href="#L1912">1912</a><a id="L1913" href="#L1913">1913</a><a id="L1914" href="#L1914">1914</a><a id="L1915" href="#L1915">1915</a><a id="L1916" href="#L1916">1916</a><a id="L1917" href="#L1917">1917</a><a id="L1918" href="#L1918">1918</a><a id="L1919" href="#L1919">1919</a><a id="L1920" href="#L1920">1920</a><a id="L1921" href="#L1921">1921</a><a id="L1922" href="#L1922">1922</a><a id="L1923" href="#L1923">1923</a><a id="L1924" href="#L1924">1924</a><a id="L1925" href="#L1925">1925</a><a id="L1926" href="#L1926">1926</a><a id="L1927" href="#L1927">1927</a><a id="L1928" href="#L1928">1928</a><a id="L1929" href="#L1929">1929</a><a id="L1930" href="#L1930">1930</a><a id="L1931" href="#L1931">1931</a><a id="L1932" href="#L1932">1932</a><a id="L1933" href="#L1933">1933</a><a id="L1934" href="#L1934">1934</a><a id="L1935" href="#L1935">1935</a><a id="L1936" href="#L1936">1936</a><a id="L1937" href="#L1937">1937</a><a id="L1938" href="#L1938">1938</a><a id="L1939" href="#L1939">1939</a><a id="L1940" href="#L1940">1940</a><a id="L1941" href="#L1941">1941</a><a id="L1942" href="#L1942">1942</a><a id="L1943" href="#L1943">1943</a><a id="L1944" href="#L1944">1944</a><a id="L1945" href="#L1945">1945</a><a id="L1946" href="#L1946">1946</a><a id="L1947" href="#L1947">1947</a><a id="L1948" href="#L1948">1948</a><a id="L1949" href="#L1949">1949</a><a id="L1950" href="#L1950">1950</a><a id="L1951" href="#L1951">1951</a><a id="L1952" href="#L1952">1952</a><a id="L1953" href="#L1953">1953</a><a id="L1954" href="#L1954">1954</a><a id="L1955" href="#L1955">1955</a><a id="L1956" href="#L1956">1956</a><a id="L1957" href="#L1957">1957</a><a id="L1958" href="#L1958">1958</a><a id="L1959" href="#L1959">1959</a><a id="L1960" href="#L1960">1960</a><a id="L1961" href="#L1961">1961</a><a id="L1962" href="#L1962">1962</a><a id="L1963" href="#L1963">1963</a><a id="L1964" href="#L1964">1964</a><a id="L1965" href="#L1965">1965</a><a id="L1966" href="#L1966">1966</a><a id="L1967" href="#L1967">1967</a><a id="L1968" href="#L1968">1968</a><a id="L1969" href="#L1969">1969</a><a id="L1970" href="#L1970">1970</a><a id="L1971" href="#L1971">1971</a><a id="L1972" href="#L1972">1972</a><a id="L1973" href="#L1973">1973</a><a id="L1974" href="#L1974">1974</a><a id="L1975" href="#L1975">1975</a><a id="L1976" href="#L1976">1976</a><a id="L1977" href="#L1977">1977</a><a id="L1978" href="#L1978">1978</a><a id="L1979" href="#L1979">1979</a><a id="L1980" href="#L1980">1980</a><a id="L1981" href="#L1981">1981</a><a id="L1982" href="#L1982">1982</a><a id="L1983" href="#L1983">1983</a><a id="L1984" href="#L1984">1984</a><a id="L1985" href="#L1985">1985</a><a id="L1986" href="#L1986">1986</a><a id="L1987" href="#L1987">1987</a><a id="L1988" href="#L1988">1988</a><a id="L1989" href="#L1989">1989</a><a id="L1990" href="#L1990">1990</a><a id="L1991" href="#L1991">1991</a><a id="L1992" href="#L1992">1992</a><a id="L1993" href="#L1993">1993</a><a id="L1994" href="#L1994">1994</a><a id="L1995" href="#L1995">1995</a><a id="L1996" href="#L1996">1996</a><a id="L1997" href="#L1997">1997</a><a id="L1998" href="#L1998">1998</a><a id="L1999" href="#L1999">1999</a><a id="L2000" href="#L2000">2000</a><a id="L2001" href="#L2001">2001</a><a id="L2002" href="#L2002">2002</a><a id="L2003" href="#L2003">2003</a><a id="L2004" href="#L2004">2004</a><a id="L2005" href="#L2005">2005</a><a id="L2006" href="#L2006">2006</a><a id="L2007" href="#L2007">2007</a><a id="L2008" href="#L2008">2008</a><a id="L2009" href="#L2009">2009</a><a id="L2010" href="#L2010">2010</a><a id="L2011" href="#L2011">2011</a><a id="L2012" href="#L2012">2012</a><a id="L2013" href="#L2013">2013</a><a id="L2014" href="#L2014">2014</a><a id="L2015" href="#L2015">2015</a><a id="L2016" href="#L2016">2016</a><a id="L2017" href="#L2017">2017</a><a id="L2018" href="#L2018">2018</a><a id="L2019" href="#L2019">2019</a><a id="L2020" href="#L2020">2020</a><a id="L2021" href="#L2021">2021</a><a id="L2022" href="#L2022">2022</a><a id="L2023" href="#L2023">2023</a><a id="L2024" href="#L2024">2024</a><a id="L2025" href="#L2025">2025</a><a id="L2026" href="#L2026">2026</a><a id="L2027" href="#L2027">2027</a><a id="L2028" href="#L2028">2028</a><a id="L2029" href="#L2029">2029</a><a id="L2030" href="#L2030">2030</a><a id="L2031" href="#L2031">2031</a><a id="L2032" href="#L2032">2032</a><a id="L2033" href="#L2033">2033</a><a id="L2034" href="#L2034">2034</a><a id="L2035" href="#L2035">2035</a><a id="L2036" href="#L2036">2036</a><a id="L2037" href="#L2037">2037</a><a id="L2038" href="#L2038">2038</a><a id="L2039" href="#L2039">2039</a><a id="L2040" href="#L2040">2040</a><a id="L2041" href="#L2041">2041</a><a id="L2042" href="#L2042">2042</a><a id="L2043" href="#L2043">2043</a><a id="L2044" href="#L2044">2044</a><a id="L2045" href="#L2045">2045</a><a id="L2046" href="#L2046">2046</a><a id="L2047" href="#L2047">2047</a><a id="L2048" href="#L2048">2048</a><a id="L2049" href="#L2049">2049</a><a id="L2050" href="#L2050">2050</a><a id="L2051" href="#L2051">2051</a><a id="L2052" href="#L2052">2052</a><a id="L2053" href="#L2053">2053</a><a id="L2054" href="#L2054">2054</a><a id="L2055" href="#L2055">2055</a><a id="L2056" href="#L2056">2056</a><a id="L2057" href="#L2057">2057</a><a id="L2058" href="#L2058">2058</a><a id="L2059" href="#L2059">2059</a><a id="L2060" href="#L2060">2060</a><a id="L2061" href="#L2061">2061</a><a id="L2062" href="#L2062">2062</a><a id="L2063" href="#L2063">2063</a><a id="L2064" href="#L2064">2064</a><a id="L2065" href="#L2065">2065</a><a id="L2066" href="#L2066">2066</a><a id="L2067" href="#L2067">2067</a><a id="L2068" href="#L2068">2068</a><a id="L2069" href="#L2069">2069</a><a id="L2070" href="#L2070">2070</a><a id="L2071" href="#L2071">2071</a><a id="L2072" href="#L2072">2072</a><a id="L2073" href="#L2073">2073</a><a id="L2074" href="#L2074">2074</a><a id="L2075" href="#L2075">2075</a><a id="L2076" href="#L2076">2076</a><a id="L2077" href="#L2077">2077</a><a id="L2078" href="#L2078">2078</a><a id="L2079" href="#L2079">2079</a><a id="L2080" href="#L2080">2080</a><a id="L2081" href="#L2081">2081</a><a id="L2082" href="#L2082">2082</a><a id="L2083" href="#L2083">2083</a><a id="L2084" href="#L2084">2084</a><a id="L2085" href="#L2085">2085</a><a id="L2086" href="#L2086">2086</a><a id="L2087" href="#L2087">2087</a><a id="L2088" href="#L2088">2088</a><a id="L2089" href="#L2089">2089</a><a id="L2090" href="#L2090">2090</a><a id="L2091" href="#L2091">2091</a><a id="L2092" href="#L2092">2092</a><a id="L2093" href="#L2093">2093</a><a id="L2094" href="#L2094">2094</a><a id="L2095" href="#L2095">2095</a><a id="L2096" href="#L2096">2096</a><a id="L2097" href="#L2097">2097</a><a id="L2098" href="#L2098">2098</a><a id="L2099" href="#L2099">2099</a><a id="L2100" href="#L2100">2100</a><a id="L2101" href="#L2101">2101</a><a id="L2102" href="#L2102">2102</a><a id="L2103" href="#L2103">2103</a><a id="L2104" href="#L2104">2104</a><a id="L2105" href="#L2105">2105</a><a id="L2106" href="#L2106">2106</a><a id="L2107" href="#L2107">2107</a><a id="L2108" href="#L2108">2108</a><a id="L2109" href="#L2109">2109</a><a id="L2110" href="#L2110">2110</a><a id="L2111" href="#L2111">2111</a><a id="L2112" href="#L2112">2112</a><a id="L2113" href="#L2113">2113</a><a id="L2114" href="#L2114">2114</a><a id="L2115" href="#L2115">2115</a><a id="L2116" href="#L2116">2116</a><a id="L2117" href="#L2117">2117</a><a id="L2118" href="#L2118">2118</a><a id="L2119" href="#L2119">2119</a><a id="L2120" href="#L2120">2120</a><a id="L2121" href="#L2121">2121</a><a id="L2122" href="#L2122">2122</a><a id="L2123" href="#L2123">2123</a><a id="L2124" href="#L2124">2124</a><a id="L2125" href="#L2125">2125</a><a id="L2126" href="#L2126">2126</a><a id="L2127" href="#L2127">2127</a><a id="L2128" href="#L2128">2128</a><a id="L2129" href="#L2129">2129</a><a id="L2130" href="#L2130">2130</a><a id="L2131" href="#L2131">2131</a><a id="L2132" href="#L2132">2132</a><a id="L2133" href="#L2133">2133</a><a id="L2134" href="#L2134">2134</a><a id="L2135" href="#L2135">2135</a><a id="L2136" href="#L2136">2136</a><a id="L2137" href="#L2137">2137</a><a id="L2138" href="#L2138">2138</a><a id="L2139" href="#L2139">2139</a><a id="L2140" href="#L2140">2140</a><a id="L2141" href="#L2141">2141</a><a id="L2142" href="#L2142">2142</a><a id="L2143" href="#L2143">2143</a><a id="L2144" href="#L2144">2144</a><a id="L2145" href="#L2145">2145</a><a id="L2146" href="#L2146">2146</a><a id="L2147" href="#L2147">2147</a><a id="L2148" href="#L2148">2148</a><a id="L2149" href="#L2149">2149</a><a id="L2150" href="#L2150">2150</a><a id="L2151" href="#L2151">2151</a><a id="L2152" href="#L2152">2152</a><a id="L2153" href="#L2153">2153</a><a id="L2154" href="#L2154">2154</a><a id="L2155" href="#L2155">2155</a><a id="L2156" href="#L2156">2156</a><a id="L2157" href="#L2157">2157</a><a id="L2158" href="#L2158">2158</a><a id="L2159" href="#L2159">2159</a><a id="L2160" href="#L2160">2160</a><a id="L2161" href="#L2161">2161</a><a id="L2162" href="#L2162">2162</a><a id="L2163" href="#L2163">2163</a><a id="L2164" href="#L2164">2164</a><a id="L2165" href="#L2165">2165</a><a id="L2166" href="#L2166">2166</a><a id="L2167" href="#L2167">2167</a><a id="L2168" href="#L2168">2168</a><a id="L2169" href="#L2169">2169</a><a id="L2170" href="#L2170">2170</a><a id="L2171" href="#L2171">2171</a><a id="L2172" href="#L2172">2172</a><a id="L2173" href="#L2173">2173</a><a id="L2174" href="#L2174">2174</a><a id="L2175" href="#L2175">2175</a><a id="L2176" href="#L2176">2176</a><a id="L2177" href="#L2177">2177</a><a id="L2178" href="#L2178">2178</a><a id="L2179" href="#L2179">2179</a><a id="L2180" href="#L2180">2180</a><a id="L2181" href="#L2181">2181</a><a id="L2182" href="#L2182">2182</a><a id="L2183" href="#L2183">2183</a><a id="L2184" href="#L2184">2184</a><a id="L2185" href="#L2185">2185</a><a id="L2186" href="#L2186">2186</a><a id="L2187" href="#L2187">2187</a><a id="L2188" href="#L2188">2188</a><a id="L2189" href="#L2189">2189</a><a id="L2190" href="#L2190">2190</a><a id="L2191" href="#L2191">2191</a><a id="L2192" href="#L2192">2192</a><a id="L2193" href="#L2193">2193</a><a id="L2194" href="#L2194">2194</a><a id="L2195" href="#L2195">2195</a><a id="L2196" href="#L2196">2196</a><a id="L2197" href="#L2197">2197</a><a id="L2198" href="#L2198">2198</a><a id="L2199" href="#L2199">2199</a><a id="L2200" href="#L2200">2200</a><a id="L2201" href="#L2201">2201</a><a id="L2202" href="#L2202">2202</a><a id="L2203" href="#L2203">2203</a><a id="L2204" href="#L2204">2204</a><a id="L2205" href="#L2205">2205</a><a id="L2206" href="#L2206">2206</a><a id="L2207" href="#L2207">2207</a><a id="L2208" href="#L2208">2208</a><a id="L2209" href="#L2209">2209</a><a id="L2210" href="#L2210">2210</a><a id="L2211" href="#L2211">2211</a><a id="L2212" href="#L2212">2212</a><a id="L2213" href="#L2213">2213</a><a id="L2214" href="#L2214">2214</a><a id="L2215" href="#L2215">2215</a><a id="L2216" href="#L2216">2216</a><a id="L2217" href="#L2217">2217</a><a id="L2218" href="#L2218">2218</a><a id="L2219" href="#L2219">2219</a><a id="L2220" href="#L2220">2220</a><a id="L2221" href="#L2221">2221</a><a id="L2222" href="#L2222">2222</a><a id="L2223" href="#L2223">2223</a><a id="L2224" href="#L2224">2224</a><a id="L2225" href="#L2225">2225</a><a id="L2226" href="#L2226">2226</a><a id="L2227" href="#L2227">2227</a><a id="L2228" href="#L2228">2228</a><a id="L2229" href="#L2229">2229</a><a id="L2230" href="#L2230">2230</a><a id="L2231" href="#L2231">2231</a><a id="L2232" href="#L2232">2232</a><a id="L2233" href="#L2233">2233</a><a id="L2234" href="#L2234">2234</a><a id="L2235" href="#L2235">2235</a><a id="L2236" href="#L2236">2236</a><a id="L2237" href="#L2237">2237</a><a id="L2238" href="#L2238">2238</a><a id="L2239" href="#L2239">2239</a><a id="L2240" href="#L2240">2240</a><a id="L2241" href="#L2241">2241</a><a id="L2242" href="#L2242">2242</a><a id="L2243" href="#L2243">2243</a><a id="L2244" href="#L2244">2244</a><a id="L2245" href="#L2245">2245</a><a id="L2246" href="#L2246">2246</a><a id="L2247" href="#L2247">2247</a><a id="L2248" href="#L2248">2248</a><a id="L2249" href="#L2249">2249</a><a id="L2250" href="#L2250">2250</a><a id="L2251" href="#L2251">2251</a><a id="L2252" href="#L2252">2252</a><a id="L2253" href="#L2253">2253</a><a id="L2254" href="#L2254">2254</a><a id="L2255" href="#L2255">2255</a><a id="L2256" href="#L2256">2256</a><a id="L2257" href="#L2257">2257</a><a id="L2258" href="#L2258">2258</a><a id="L2259" href="#L2259">2259</a><a id="L2260" href="#L2260">2260</a><a id="L2261" href="#L2261">2261</a><a id="L2262" href="#L2262">2262</a><a id="L2263" href="#L2263">2263</a><a id="L2264" href="#L2264">2264</a><a id="L2265" href="#L2265">2265</a><a id="L2266" href="#L2266">2266</a><a id="L2267" href="#L2267">2267</a><a id="L2268" href="#L2268">2268</a><a id="L2269" href="#L2269">2269</a><a id="L2270" href="#L2270">2270</a><a id="L2271" href="#L2271">2271</a><a id="L2272" href="#L2272">2272</a><a id="L2273" href="#L2273">2273</a><a id="L2274" href="#L2274">2274</a><a id="L2275" href="#L2275">2275</a><a id="L2276" href="#L2276">2276</a><a id="L2277" href="#L2277">2277</a><a id="L2278" href="#L2278">2278</a><a id="L2279" href="#L2279">2279</a><a id="L2280" href="#L2280">2280</a><a id="L2281" href="#L2281">2281</a><a id="L2282" href="#L2282">2282</a><a id="L2283" href="#L2283">2283</a><a id="L2284" href="#L2284">2284</a><a id="L2285" href="#L2285">2285</a><a id="L2286" href="#L2286">2286</a><a id="L2287" href="#L2287">2287</a><a id="L2288" href="#L2288">2288</a><a id="L2289" href="#L2289">2289</a><a id="L2290" href="#L2290">2290</a><a id="L2291" href="#L2291">2291</a><a id="L2292" href="#L2292">2292</a><a id="L2293" href="#L2293">2293</a><a id="L2294" href="#L2294">2294</a><a id="L2295" href="#L2295">2295</a><a id="L2296" href="#L2296">2296</a><a id="L2297" href="#L2297">2297</a><a id="L2298" href="#L2298">2298</a><a id="L2299" href="#L2299">2299</a><a id="L2300" href="#L2300">2300</a><a id="L2301" href="#L2301">2301</a><a id="L2302" href="#L2302">2302</a><a id="L2303" href="#L2303">2303</a><a id="L2304" href="#L2304">2304</a><a id="L2305" href="#L2305">2305</a><a id="L2306" href="#L2306">2306</a><a id="L2307" href="#L2307">2307</a><a id="L2308" href="#L2308">2308</a><a id="L2309" href="#L2309">2309</a><a id="L2310" href="#L2310">2310</a><a id="L2311" href="#L2311">2311</a><a id="L2312" href="#L2312">2312</a><a id="L2313" href="#L2313">2313</a><a id="L2314" href="#L2314">2314</a><a id="L2315" href="#L2315">2315</a><a id="L2316" href="#L2316">2316</a><a id="L2317" href="#L2317">2317</a><a id="L2318" href="#L2318">2318</a><a id="L2319" href="#L2319">2319</a><a id="L2320" href="#L2320">2320</a><a id="L2321" href="#L2321">2321</a><a id="L2322" href="#L2322">2322</a><a id="L2323" href="#L2323">2323</a><a id="L2324" href="#L2324">2324</a><a id="L2325" href="#L2325">2325</a><a id="L2326" href="#L2326">2326</a><a id="L2327" href="#L2327">2327</a><a id="L2328" href="#L2328">2328</a><a id="L2329" href="#L2329">2329</a><a id="L2330" href="#L2330">2330</a><a id="L2331" href="#L2331">2331</a><a id="L2332" href="#L2332">2332</a><a id="L2333" href="#L2333">2333</a><a id="L2334" href="#L2334">2334</a><a id="L2335" href="#L2335">2335</a><a id="L2336" href="#L2336">2336</a><a id="L2337" href="#L2337">2337</a><a id="L2338" href="#L2338">2338</a><a id="L2339" href="#L2339">2339</a><a id="L2340" href="#L2340">2340</a><a id="L2341" href="#L2341">2341</a><a id="L2342" href="#L2342">2342</a><a id="L2343" href="#L2343">2343</a><a id="L2344" href="#L2344">2344</a><a id="L2345" href="#L2345">2345</a><a id="L2346" href="#L2346">2346</a><a id="L2347" href="#L2347">2347</a><a id="L2348" href="#L2348">2348</a><a id="L2349" href="#L2349">2349</a><a id="L2350" href="#L2350">2350</a><a id="L2351" href="#L2351">2351</a><a id="L2352" href="#L2352">2352</a><a id="L2353" href="#L2353">2353</a><a id="L2354" href="#L2354">2354</a><a id="L2355" href="#L2355">2355</a><a id="L2356" href="#L2356">2356</a><a id="L2357" href="#L2357">2357</a><a id="L2358" href="#L2358">2358</a><a id="L2359" href="#L2359">2359</a><a id="L2360" href="#L2360">2360</a><a id="L2361" href="#L2361">2361</a><a id="L2362" href="#L2362">2362</a><a id="L2363" href="#L2363">2363</a><a id="L2364" href="#L2364">2364</a><a id="L2365" href="#L2365">2365</a><a id="L2366" href="#L2366">2366</a><a id="L2367" href="#L2367">2367</a><a id="L2368" href="#L2368">2368</a><a id="L2369" href="#L2369">2369</a><a id="L2370" href="#L2370">2370</a><a id="L2371" href="#L2371">2371</a><a id="L2372" href="#L2372">2372</a><a id="L2373" href="#L2373">2373</a><a id="L2374" href="#L2374">2374</a><a id="L2375" href="#L2375">2375</a><a id="L2376" href="#L2376">2376</a><a id="L2377" href="#L2377">2377</a><a id="L2378" href="#L2378">2378</a><a id="L2379" href="#L2379">2379</a><a id="L2380" href="#L2380">2380</a><a id="L2381" href="#L2381">2381</a><a id="L2382" href="#L2382">2382</a><a id="L2383" href="#L2383">2383</a><a id="L2384" href="#L2384">2384</a><a id="L2385" href="#L2385">2385</a><a id="L2386" href="#L2386">2386</a><a id="L2387" href="#L2387">2387</a><a id="L2388" href="#L2388">2388</a><a id="L2389" href="#L2389">2389</a><a id="L2390" href="#L2390">2390</a><a id="L2391" href="#L2391">2391</a><a id="L2392" href="#L2392">2392</a><a id="L2393" href="#L2393">2393</a><a id="L2394" href="#L2394">2394</a><a id="L2395" href="#L2395">2395</a><a id="L2396" href="#L2396">2396</a><a id="L2397" href="#L2397">2397</a><a id="L2398" href="#L2398">2398</a><a id="L2399" href="#L2399">2399</a><a id="L2400" href="#L2400">2400</a><a id="L2401" href="#L2401">2401</a><a id="L2402" href="#L2402">2402</a><a id="L2403" href="#L2403">2403</a><a id="L2404" href="#L2404">2404</a><a id="L2405" href="#L2405">2405</a><a id="L2406" href="#L2406">2406</a><a id="L2407" href="#L2407">2407</a><a id="L2408" href="#L2408">2408</a><a id="L2409" href="#L2409">2409</a><a id="L2410" href="#L2410">2410</a><a id="L2411" href="#L2411">2411</a><a id="L2412" href="#L2412">2412</a><a id="L2413" href="#L2413">2413</a><a id="L2414" href="#L2414">2414</a><a id="L2415" href="#L2415">2415</a><a id="L2416" href="#L2416">2416</a><a id="L2417" href="#L2417">2417</a><a id="L2418" href="#L2418">2418</a><a id="L2419" href="#L2419">2419</a><a id="L2420" href="#L2420">2420</a><a id="L2421" href="#L2421">2421</a><a id="L2422" href="#L2422">2422</a><a id="L2423" href="#L2423">2423</a><a id="L2424" href="#L2424">2424</a><a id="L2425" href="#L2425">2425</a><a id="L2426" href="#L2426">2426</a><a id="L2427" href="#L2427">2427</a><a id="L2428" href="#L2428">2428</a><a id="L2429" href="#L2429">2429</a><a id="L2430" href="#L2430">2430</a><a id="L2431" href="#L2431">2431</a><a id="L2432" href="#L2432">2432</a><a id="L2433" href="#L2433">2433</a><a id="L2434" href="#L2434">2434</a><a id="L2435" href="#L2435">2435</a><a id="L2436" href="#L2436">2436</a><a id="L2437" href="#L2437">2437</a><a id="L2438" href="#L2438">2438</a><a id="L2439" href="#L2439">2439</a><a id="L2440" href="#L2440">2440</a><a id="L2441" href="#L2441">2441</a><a id="L2442" href="#L2442">2442</a><a id="L2443" href="#L2443">2443</a><a id="L2444" href="#L2444">2444</a><a id="L2445" href="#L2445">2445</a><a id="L2446" href="#L2446">2446</a><a id="L2447" href="#L2447">2447</a><a id="L2448" href="#L2448">2448</a><a id="L2449" href="#L2449">2449</a><a id="L2450" href="#L2450">2450</a><a id="L2451" href="#L2451">2451</a><a id="L2452" href="#L2452">2452</a><a id="L2453" href="#L2453">2453</a><a id="L2454" href="#L2454">2454</a><a id="L2455" href="#L2455">2455</a><a id="L2456" href="#L2456">2456</a><a id="L2457" href="#L2457">2457</a><a id="L2458" href="#L2458">2458</a><a id="L2459" href="#L2459">2459</a><a id="L2460" href="#L2460">2460</a><a id="L2461" href="#L2461">2461</a><a id="L2462" href="#L2462">2462</a><a id="L2463" href="#L2463">2463</a><a id="L2464" href="#L2464">2464</a><a id="L2465" href="#L2465">2465</a><a id="L2466" href="#L2466">2466</a><a id="L2467" href="#L2467">2467</a><a id="L2468" href="#L2468">2468</a><a id="L2469" href="#L2469">2469</a><a id="L2470" href="#L2470">2470</a><a id="L2471" href="#L2471">2471</a><a id="L2472" href="#L2472">2472</a><a id="L2473" href="#L2473">2473</a><a id="L2474" href="#L2474">2474</a><a id="L2475" href="#L2475">2475</a><a id="L2476" href="#L2476">2476</a><a id="L2477" href="#L2477">2477</a><a id="L2478" href="#L2478">2478</a><a id="L2479" href="#L2479">2479</a><a id="L2480" href="#L2480">2480</a><a id="L2481" href="#L2481">2481</a><a id="L2482" href="#L2482">2482</a><a id="L2483" href="#L2483">2483</a><a id="L2484" href="#L2484">2484</a><a id="L2485" href="#L2485">2485</a><a id="L2486" href="#L2486">2486</a><a id="L2487" href="#L2487">2487</a><a id="L2488" href="#L2488">2488</a><a id="L2489" href="#L2489">2489</a><a id="L2490" href="#L2490">2490</a><a id="L2491" href="#L2491">2491</a><a id="L2492" href="#L2492">2492</a><a id="L2493" href="#L2493">2493</a><a id="L2494" href="#L2494">2494</a><a id="L2495" href="#L2495">2495</a><a id="L2496" href="#L2496">2496</a><a id="L2497" href="#L2497">2497</a><a id="L2498" href="#L2498">2498</a><a id="L2499" href="#L2499">2499</a><a id="L2500" href="#L2500">2500</a><a id="L2501" href="#L2501">2501</a><a id="L2502" href="#L2502">2502</a><a id="L2503" href="#L2503">2503</a><a id="L2504" href="#L2504">2504</a><a id="L2505" href="#L2505">2505</a><a id="L2506" href="#L2506">2506</a><a id="L2507" href="#L2507">2507</a><a id="L2508" href="#L2508">2508</a><a id="L2509" href="#L2509">2509</a><a id="L2510" href="#L2510">2510</a><a id="L2511" href="#L2511">2511</a><a id="L2512" href="#L2512">2512</a><a id="L2513" href="#L2513">2513</a><a id="L2514" href="#L2514">2514</a><a id="L2515" href="#L2515">2515</a><a id="L2516" href="#L2516">2516</a><a id="L2517" href="#L2517">2517</a><a id="L2518" href="#L2518">2518</a><a id="L2519" href="#L2519">2519</a><a id="L2520" href="#L2520">2520</a><a id="L2521" href="#L2521">2521</a><a id="L2522" href="#L2522">2522</a><a id="L2523" href="#L2523">2523</a><a id="L2524" href="#L2524">2524</a><a id="L2525" href="#L2525">2525</a><a id="L2526" href="#L2526">2526</a><a id="L2527" href="#L2527">2527</a><a id="L2528" href="#L2528">2528</a><a id="L2529" href="#L2529">2529</a><a id="L2530" href="#L2530">2530</a><a id="L2531" href="#L2531">2531</a><a id="L2532" href="#L2532">2532</a><a id="L2533" href="#L2533">2533</a><a id="L2534" href="#L2534">2534</a><a id="L2535" href="#L2535">2535</a><a id="L2536" href="#L2536">2536</a><a id="L2537" href="#L2537">2537</a><a id="L2538" href="#L2538">2538</a><a id="L2539" href="#L2539">2539</a><a id="L2540" href="#L2540">2540</a><a id="L2541" href="#L2541">2541</a><a id="L2542" href="#L2542">2542</a><a id="L2543" href="#L2543">2543</a><a id="L2544" href="#L2544">2544</a><a id="L2545" href="#L2545">2545</a><a id="L2546" href="#L2546">2546</a><a id="L2547" href="#L2547">2547</a><a id="L2548" href="#L2548">2548</a><a id="L2549" href="#L2549">2549</a><a id="L2550" href="#L2550">2550</a><a id="L2551" href="#L2551">2551</a><a id="L2552" href="#L2552">2552</a><a id="L2553" href="#L2553">2553</a><a id="L2554" href="#L2554">2554</a><a id="L2555" href="#L2555">2555</a><a id="L2556" href="#L2556">2556</a><a id="L2557" href="#L2557">2557</a><a id="L2558" href="#L2558">2558</a><a id="L2559" href="#L2559">2559</a><a id="L2560" href="#L2560">2560</a><a id="L2561" href="#L2561">2561</a><a id="L2562" href="#L2562">2562</a><a id="L2563" href="#L2563">2563</a><a id="L2564" href="#L2564">2564</a><a id="L2565" href="#L2565">2565</a><a id="L2566" href="#L2566">2566</a><a id="L2567" href="#L2567">2567</a><a id="L2568" href="#L2568">2568</a><a id="L2569" href="#L2569">2569</a><a id="L2570" href="#L2570">2570</a><a id="L2571" href="#L2571">2571</a><a id="L2572" href="#L2572">2572</a><a id="L2573" href="#L2573">2573</a><a id="L2574" href="#L2574">2574</a><a id="L2575" href="#L2575">2575</a><a id="L2576" href="#L2576">2576</a><a id="L2577" href="#L2577">2577</a><a id="L2578" href="#L2578">2578</a><a id="L2579" href="#L2579">2579</a><a id="L2580" href="#L2580">2580</a><a id="L2581" href="#L2581">2581</a><a id="L2582" href="#L2582">2582</a><a id="L2583" href="#L2583">2583</a><a id="L2584" href="#L2584">2584</a><a id="L2585" href="#L2585">2585</a><a id="L2586" href="#L2586">2586</a><a id="L2587" href="#L2587">2587</a><a id="L2588" href="#L2588">2588</a><a id="L2589" href="#L2589">2589</a><a id="L2590" href="#L2590">2590</a><a id="L2591" href="#L2591">2591</a><a id="L2592" href="#L2592">2592</a><a id="L2593" href="#L2593">2593</a><a id="L2594" href="#L2594">2594</a><a id="L2595" href="#L2595">2595</a><a id="L2596" href="#L2596">2596</a><a id="L2597" href="#L2597">2597</a><a id="L2598" href="#L2598">2598</a><a id="L2599" href="#L2599">2599</a><a id="L2600" href="#L2600">2600</a><a id="L2601" href="#L2601">2601</a><a id="L2602" href="#L2602">2602</a><a id="L2603" href="#L2603">2603</a><a id="L2604" href="#L2604">2604</a><a id="L2605" href="#L2605">2605</a><a id="L2606" href="#L2606">2606</a><a id="L2607" href="#L2607">2607</a><a id="L2608" href="#L2608">2608</a><a id="L2609" href="#L2609">2609</a><a id="L2610" href="#L2610">2610</a><a id="L2611" href="#L2611">2611</a><a id="L2612" href="#L2612">2612</a><a id="L2613" href="#L2613">2613</a><a id="L2614" href="#L2614">2614</a><a id="L2615" href="#L2615">2615</a><a id="L2616" href="#L2616">2616</a><a id="L2617" href="#L2617">2617</a><a id="L2618" href="#L2618">2618</a><a id="L2619" href="#L2619">2619</a><a id="L2620" href="#L2620">2620</a><a id="L2621" href="#L2621">2621</a><a id="L2622" href="#L2622">2622</a><a id="L2623" href="#L2623">2623</a><a id="L2624" href="#L2624">2624</a><a id="L2625" href="#L2625">2625</a><a id="L2626" href="#L2626">2626</a><a id="L2627" href="#L2627">2627</a><a id="L2628" href="#L2628">2628</a><a id="L2629" href="#L2629">2629</a><a id="L2630" href="#L2630">2630</a><a id="L2631" href="#L2631">2631</a><a id="L2632" href="#L2632">2632</a><a id="L2633" href="#L2633">2633</a><a id="L2634" href="#L2634">2634</a><a id="L2635" href="#L2635">2635</a><a id="L2636" href="#L2636">2636</a><a id="L2637" href="#L2637">2637</a><a id="L2638" href="#L2638">2638</a><a id="L2639" href="#L2639">2639</a><a id="L2640" href="#L2640">2640</a><a id="L2641" href="#L2641">2641</a><a id="L2642" href="#L2642">2642</a><a id="L2643" href="#L2643">2643</a><a id="L2644" href="#L2644">2644</a><a id="L2645" href="#L2645">2645</a><a id="L2646" href="#L2646">2646</a><a id="L2647" href="#L2647">2647</a><a id="L2648" href="#L2648">2648</a><a id="L2649" href="#L2649">2649</a><a id="L2650" href="#L2650">2650</a><a id="L2651" href="#L2651">2651</a><a id="L2652" href="#L2652">2652</a><a id="L2653" href="#L2653">2653</a><a id="L2654" href="#L2654">2654</a><a id="L2655" href="#L2655">2655</a><a id="L2656" href="#L2656">2656</a><a id="L2657" href="#L2657">2657</a><a id="L2658" href="#L2658">2658</a><a id="L2659" href="#L2659">2659</a><a id="L2660" href="#L2660">2660</a><a id="L2661" href="#L2661">2661</a><a id="L2662" href="#L2662">2662</a><a id="L2663" href="#L2663">2663</a><a id="L2664" href="#L2664">2664</a><a id="L2665" href="#L2665">2665</a><a id="L2666" href="#L2666">2666</a><a id="L2667" href="#L2667">2667</a><a id="L2668" href="#L2668">2668</a><a id="L2669" href="#L2669">2669</a><a id="L2670" href="#L2670">2670</a><a id="L2671" href="#L2671">2671</a><a id="L2672" href="#L2672">2672</a><a id="L2673" href="#L2673">2673</a><a id="L2674" href="#L2674">2674</a><a id="L2675" href="#L2675">2675</a><a id="L2676" href="#L2676">2676</a><a id="L2677" href="#L2677">2677</a><a id="L2678" href="#L2678">2678</a><a id="L2679" href="#L2679">2679</a><a id="L2680" href="#L2680">2680</a><a id="L2681" href="#L2681">2681</a><a id="L2682" href="#L2682">2682</a><a id="L2683" href="#L2683">2683</a><a id="L2684" href="#L2684">2684</a><a id="L2685" href="#L2685">2685</a><a id="L2686" href="#L2686">2686</a><a id="L2687" href="#L2687">2687</a><a id="L2688" href="#L2688">2688</a><a id="L2689" href="#L2689">2689</a><a id="L2690" href="#L2690">2690</a><a id="L2691" href="#L2691">2691</a><a id="L2692" href="#L2692">2692</a><a id="L2693" href="#L2693">2693</a><a id="L2694" href="#L2694">2694</a><a id="L2695" href="#L2695">2695</a><a id="L2696" href="#L2696">2696</a><a id="L2697" href="#L2697">2697</a><a id="L2698" href="#L2698">2698</a><a id="L2699" href="#L2699">2699</a><a id="L2700" href="#L2700">2700</a><a id="L2701" href="#L2701">2701</a><a id="L2702" href="#L2702">2702</a><a id="L2703" href="#L2703">2703</a><a id="L2704" href="#L2704">2704</a><a id="L2705" href="#L2705">2705</a><a id="L2706" href="#L2706">2706</a><a id="L2707" href="#L2707">2707</a><a id="L2708" href="#L2708">2708</a><a id="L2709" href="#L2709">2709</a><a id="L2710" href="#L2710">2710</a><a id="L2711" href="#L2711">2711</a><a id="L2712" href="#L2712">2712</a><a id="L2713" href="#L2713">2713</a><a id="L2714" href="#L2714">2714</a><a id="L2715" href="#L2715">2715</a><a id="L2716" href="#L2716">2716</a><a id="L2717" href="#L2717">2717</a><a id="L2718" href="#L2718">2718</a><a id="L2719" href="#L2719">2719</a><a id="L2720" href="#L2720">2720</a><a id="L2721" href="#L2721">2721</a><a id="L2722" href="#L2722">2722</a><a id="L2723" href="#L2723">2723</a><a id="L2724" href="#L2724">2724</a><a id="L2725" href="#L2725">2725</a></td>
<td><td><pre class="sourcecode">

<span class="lc">// Written in the D programming language.</span>

<span class="bc">/**
 * This module implements the workhorse functionality for string and
 * I/O formatting.  It's comparable to C99's vsprintf().
 *
 * Macros:
 *        WIKI = Phobos/StdFormat
 */</span>

<span class="bc">/*
 *  Copyright (C) 2004-2006 by Digital Mars, www.digitalmars.com
 *  Written by Walter Bright and Andrei Alexandrescu
 *
 *  This software is provided 'as-is', without any express or implied
 *  warranty. In no event will the authors be held liable for any damages
 *  arising from the use of this software.
 *
 *  Permission is granted to anyone to use this software for any purpose,
 *  including commercial applications, and to alter it and redistribute it
 *  freely, subject to the following restrictions:
 *
 *  o  The origin of this software must not be misrepresented; you must not
 *     claim that you wrote the original software. If you use this software
 *     in a product, an acknowledgment in the product documentation would be
 *     appreciated but is not required.
 *  o  Altered source versions must be plainly marked as such, and must not
 *     be misrepresented as being the original software.
 *  o  This notice may not be removed or altered from any source
 *     distribution.
 */</span>

<span class="d Compound"><span class="d Module"><span class="k">module</span> <span class="i">std</span>.<span class="i">format</span>;</span>

<span class="lc">//debug=format;                // uncomment to turn on debugging printf's</span>

<span class="d Import"><span class="k">import</span> <span class="i">std</span>.<span class="i">stdarg</span>;</span>        <span class="lc">// caller will need va_list</span>

<span class="d Protection"><span class="k">private</span> <span class="d Import"><span class="k">import</span> <span class="i">std</span>.<span class="i">utf</span>;</span></span>
<span class="d Protection"><span class="k">private</span> <span class="d Import"><span class="k">import</span> <span class="i">std</span>.<span class="i">c</span>.<span class="i">stdio</span>;</span></span>
<span class="d Protection"><span class="k">private</span> <span class="d Import"><span class="k">import</span> <span class="i">std</span>.<span class="i">c</span>.<span class="i">stdlib</span>;</span></span>
<span class="d Protection"><span class="k">private</span> <span class="d Import"><span class="k">import</span> <span class="i">std</span>.<span class="i">c</span>.<span class="i">string</span>;</span></span>
<span class="d Protection"><span class="k">private</span> <span class="d Import"><span class="k">import</span> <span class="i">std</span>.<span class="i">string</span>;</span></span>
<span class="d Import"><span class="k">import</span> <span class="i">std</span>.<span class="i">ctype</span>;</span>
<span class="d Import"><span class="k">import</span> <span class="i">std</span>.<span class="i">conv</span>;</span>
<span class="d Import"><span class="k">import</span> <span class="i">std</span>.<span class="i">traits</span>;</span>
<span class="d Import"><span class="k">import</span> <span class="i">std</span>.<span class="i">typetuple</span>;</span>
<span class="d Import"><span class="k">import</span> <span class="i">std</span>.<span class="i">stdio</span>;</span> <span class="lc">// for debugging only</span>
<span class="d Import"><span class="k">import</span> <span class="i">std</span>.<span class="i">contracts</span>;</span>
<span class="d Import"><span class="k">import</span> <span class="i">std</span>.<span class="i">system</span>;</span>

<span class="d Version"><span class="k">version</span> (<span class="i">Windows</span>)
<span class="d Compound">{
    <span class="d Version"><span class="k">version</span> (<span class="i">DigitalMars</span>)
    <span class="d Compound">{
        <span class="d Version"><span class="k">version</span> = <span class="i">DigitalMarsC</span>;</span>
    }</span></span>
}</span></span>

<span class="d Version"><span class="k">version</span> (<span class="i">DigitalMarsC</span>)
<span class="d Compound">{
    <span class="lc">// This is DMC's internal floating point formatting function</span>
    <span class="d Linkage"><span class="k">extern</span> (<span class="i">C</span>)
    <span class="d Compound">{
        <span class="d StorageClass"><span class="k">extern</span> <span class="d Variables"><span class="t Integral"><span class="k">char</span></span><span class="t Pointer">*</span> <span class="t Function"><span class="k">function</span><span class="o Parameters">(<span class="o Parameter"><span class="t Integral"><span class="k">int</span></span> <span class="i">c</span></span>, <span class="o Parameter"><span class="t Integral"><span class="k">int</span></span> <span class="i">flags</span></span>, <span class="o Parameter"><span class="t Integral"><span class="k">int</span></span> <span class="i">precision</span></span>, <span class="o Parameter"><span class="t Integral"><span class="k">real</span></span><span class="t Pointer">*</span> <span class="i">pdval</span></span>,
            <span class="o Parameter"><span class="t Integral"><span class="k">char</span></span><span class="t Pointer">*</span> <span class="i">buf</span></span>, <span class="o Parameter"><span class="t Integral"><span class="k">int</span></span><span class="t Pointer">*</span> <span class="i">psl</span></span>, <span class="o Parameter"><span class="t Integral"><span class="k">int</span></span> <span class="i">width</span></span>)</span></span> <span class="i">__pfloatfmt</span>;</span></span>
    }</span></span>
    <span class="d Alias"><span class="k">alias</span> <span class="d Variables"><span class="t Qualified"><span class="t Qualified"><span class="t Qualified"><span class="t Identifier"><span class="i">std</span></span>.<span class="t Identifier"><span class="i">c</span></span></span>.<span class="t Identifier"><span class="i">stdio</span></span></span>.<span class="t Identifier"><span class="i">_snprintf</span></span></span> <span class="i">snprintf</span>;</span></span>
}</span>
<span class="k">else</span>
<span class="d Compound">{
    <span class="lc">// Use C99 snprintf</span>
    <span class="d Linkage"><span class="k">extern</span> (<span class="i">C</span>) <span class="d Function"><span class="t Integral"><span class="k">int</span></span> <span class="i">snprintf</span><span class="o Parameters">(<span class="o Parameter"><span class="t Integral"><span class="k">char</span></span><span class="t Pointer">*</span> <span class="i">s</span></span>, <span class="o Parameter"><span class="t Identifier"><span class="i">size_t</span></span> <span class="i">n</span></span>, <span class="o Parameter"><span class="k">const</span> <span class="t Integral"><span class="k">char</span></span><span class="t Pointer">*</span> <span class="i">format</span></span>, <span class="o Parameter">...</span>)</span><span class="s FuncBody">;</span></span></span>
}</span></span>

<span class="bc">/**********************************************************************
 * Signals a mismatch between a format and its corresponding argument.
 */</span>
<span class="d Class"><span class="k">class</span> <span class="i">FormatError</span> : <span class="t BaseClass"><span class="t Identifier"><span class="i">Error</span></span></span>
<span class="d Compound">{
    <span class="d Constructor"><span class="k">this</span><span class="o Parameters">()</span>
    <span class="s FuncBody"><span class="s Compound">{
        <span class="s Expression"><span class="e Call"><span class="e Super"><span class="k">super</span></span>(<span class="sl">"std.format"</span>)</span>;</span>
    }</span></span></span>

    <span class="d Constructor"><span class="k">this</span><span class="o Parameters">(<span class="o Parameter"><span class="t Identifier"><span class="i">string</span></span> <span class="i">msg</span></span>)</span>
    <span class="s FuncBody"><span class="s Compound">{
        <span class="s Expression"><span class="e Call"><span class="e Super"><span class="k">super</span></span>(<span class="sl">"std.format "</span> ~ <span class="i">msg</span>)</span>;</span>
    }</span></span></span>
}</span></span>


<span class="d Enum"><span class="k">enum</span> <span class="i">Mangle</span> : <span class="t Integral"><span class="k">char</span></span>
{
    <span class="d EnumMember"><span class="i">Tvoid</span>     = <span class="e Char"><span class="cl">'v'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tbool</span>     = <span class="e Char"><span class="cl">'b'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tbyte</span>     = <span class="e Char"><span class="cl">'g'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tubyte</span>    = <span class="e Char"><span class="cl">'h'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tshort</span>    = <span class="e Char"><span class="cl">'s'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tushort</span>   = <span class="e Char"><span class="cl">'t'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tint</span>      = <span class="e Char"><span class="cl">'i'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tuint</span>     = <span class="e Char"><span class="cl">'k'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tlong</span>     = <span class="e Char"><span class="cl">'l'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tulong</span>    = <span class="e Char"><span class="cl">'m'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tfloat</span>    = <span class="e Char"><span class="cl">'f'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tdouble</span>   = <span class="e Char"><span class="cl">'d'</span></span></span>,
    <span class="d EnumMember"><span class="i">Treal</span>     = <span class="e Char"><span class="cl">'e'</span></span></span>,

    <span class="d EnumMember"><span class="i">Tifloat</span>   = <span class="e Char"><span class="cl">'o'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tidouble</span>  = <span class="e Char"><span class="cl">'p'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tireal</span>    = <span class="e Char"><span class="cl">'j'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tcfloat</span>   = <span class="e Char"><span class="cl">'q'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tcdouble</span>  = <span class="e Char"><span class="cl">'r'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tcreal</span>    = <span class="e Char"><span class="cl">'c'</span></span></span>,

    <span class="d EnumMember"><span class="i">Tchar</span>     = <span class="e Char"><span class="cl">'a'</span></span></span>,
    <span class="d EnumMember"><span class="i">Twchar</span>    = <span class="e Char"><span class="cl">'u'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tdchar</span>    = <span class="e Char"><span class="cl">'w'</span></span></span>,

    <span class="d EnumMember"><span class="i">Tarray</span>    = <span class="e Char"><span class="cl">'A'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tsarray</span>   = <span class="e Char"><span class="cl">'G'</span></span></span>,
    <span class="d EnumMember"><span class="i">Taarray</span>   = <span class="e Char"><span class="cl">'H'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tpointer</span>  = <span class="e Char"><span class="cl">'P'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tfunction</span> = <span class="e Char"><span class="cl">'F'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tident</span>    = <span class="e Char"><span class="cl">'I'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tclass</span>    = <span class="e Char"><span class="cl">'C'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tstruct</span>   = <span class="e Char"><span class="cl">'S'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tenum</span>     = <span class="e Char"><span class="cl">'E'</span></span></span>,
    <span class="d EnumMember"><span class="i">Ttypedef</span>  = <span class="e Char"><span class="cl">'T'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tdelegate</span> = <span class="e Char"><span class="cl">'D'</span></span></span>,

    <span class="d EnumMember"><span class="i">Tconst</span>    = <span class="e Char"><span class="cl">'x'</span></span></span>,
    <span class="d EnumMember"><span class="i">Tinvariant</span> = <span class="e Char"><span class="cl">'y'</span></span></span>,
}</span>

<span class="lc">// return the TypeInfo for a primitive type and null otherwise.</span>
<span class="lc">// This is required since for arrays of ints we only have the mangled</span>
<span class="lc">// char to work from. If arrays always subclassed TypeInfo_Array this</span>
<span class="lc">// routine could go away.</span>
<span class="d Protection"><span class="k">private</span> <span class="d Function"><span class="t Identifier"><span class="i">TypeInfo</span></span> <span class="i">primitiveTypeInfo</span><span class="o Parameters">(<span class="o Parameter"><span class="t Identifier"><span class="i">Mangle</span></span> <span class="i">m</span></span>)</span> 
<span class="s FuncBody"><span class="s Compound">{
  <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">TypeInfo</span></span> <span class="i">ti</span>;</span></span>

  <span class="s Switch"><span class="k">switch</span> (<span class="e Identifier"><span class="i">m</span></span>)
    <span class="s Compound">{
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tvoid</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">void</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tbool</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">bool</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tbyte</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">byte</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tubyte</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">ubyte</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tshort</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">short</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tushort</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">ushort</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tint</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">int</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tuint</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">uint</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tlong</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">long</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tulong</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">ulong</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tfloat</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">float</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tdouble</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">double</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Treal</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">real</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tifloat</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">ifloat</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tidouble</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">idouble</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tireal</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">ireal</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tcfloat</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">cfloat</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tcdouble</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">cdouble</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tcreal</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">creal</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tchar</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">char</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Twchar</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">wchar</span></span>)</span></span>;</span><span class="s Break"><span class="k">break</span>;</span></span></span></span>
    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tdchar</span></span></span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Typeid"><span class="k">typeid</span>(<span class="t Integral"><span class="k">dchar</span></span>)</span></span>;</span></span></span></span>
    <span class="s Default"><span class="k">default</span>:
      <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span></span></span></span>
    }</span></span>
  <span class="s Return"><span class="k">return</span> <span class="e Identifier"><span class="i">ti</span></span>;</span>
}</span></span></span></span>

<span class="bc">/************************************
 * Interprets variadic argument list pointed to by argptr whose types are given
 * by arguments[], formats them according to embedded format strings in the
 * variadic argument list, and sends the resulting characters to putc.
 *
 * The variadic arguments are consumed in order.
 * Each is formatted into a sequence of chars, using the default format
 * specification for its type, and the
 * characters are sequentially passed to putc.
 * If a char[], wchar[], or dchar[]
 * argument is encountered, it is interpreted as a format string. As many
 * arguments as specified in the format string are consumed and formatted
 * according to the format specifications in that string and passed to putc. If
 * there are too few remaining arguments, a FormatError is thrown. If there are
 * more remaining arguments than needed by the format specification, the default
 * processing of arguments resumes until they are all consumed.
 *
 * Params:
 *        putc =        Output is sent do this delegate, character by character.
 *        arguments = Array of TypeInfo's, one for each argument to be formatted.
 *        argptr = Points to variadic argument list.
 *
 * Throws:
 *        Mismatched arguments and formats result in a FormatError being thrown.
 *
 * Format_String:
 *        &lt;a name="format-string"&gt;$(I Format strings)&lt;/a&gt;
 *        consist of characters interspersed with
 *        $(I format specifications). Characters are simply copied
 *        to the output (such as putc) after any necessary conversion
 *        to the corresponding UTF-8 sequence.
 *
 *        A $(I format specification) starts with a '%' character,
 *        and has the following grammar:

&lt;pre&gt;
$(I FormatSpecification):
    $(B '%%')
    $(B '%') $(I Flags) $(I Width) $(I Precision) $(I FormatChar)

$(I Flags):
    $(I empty)
    $(B '-') $(I Flags)
    $(B '+') $(I Flags)
    $(B '#') $(I Flags)
    $(B '0') $(I Flags)
    $(B ' ') $(I Flags)

$(I Width):
    $(I empty)
    $(I Integer)
    $(B '*')

$(I Precision):
    $(I empty)
    $(B '.')
    $(B '.') $(I Integer)
    $(B '.*')

$(I Integer):
    $(I Digit)
    $(I Digit) $(I Integer)

$(I Digit):
    $(B '0')
    $(B '1')
    $(B '2')
    $(B '3')
    $(B '4')
    $(B '5')
    $(B '6')
    $(B '7')
    $(B '8')
    $(B '9')

$(I FormatChar):
    $(B 's')
    $(B 'b')
    $(B 'd')
    $(B 'o')
    $(B 'x')
    $(B 'X')
    $(B 'e')
    $(B 'E')
    $(B 'f')
    $(B 'F')
    $(B 'g')
    $(B 'G')
    $(B 'a')
    $(B 'A')
&lt;/pre&gt;
    &lt;dl&gt;
    &lt;dt&gt;$(I Flags)
    &lt;dl&gt;
        &lt;dt&gt;$(B '-')
        &lt;dd&gt;
        Left justify the result in the field.
        It overrides any $(B 0) flag.

        &lt;dt&gt;$(B '+')
        &lt;dd&gt;Prefix positive numbers in a signed conversion with a $(B +).
        It overrides any $(I space) flag.

        &lt;dt&gt;$(B '#')
        &lt;dd&gt;Use alternative formatting:
        &lt;dl&gt;
            &lt;dt&gt;For $(B 'o'):
            &lt;dd&gt; Add to precision as necessary so that the first digit
            of the octal formatting is a '0', even if both the argument
            and the $(I Precision) are zero.
            &lt;dt&gt; For $(B 'x') ($(B 'X')):
            &lt;dd&gt; If non-zero, prefix result with $(B 0x) ($(B 0X)).
            &lt;dt&gt; For floating point formatting:
            &lt;dd&gt; Always insert the decimal point.
            &lt;dt&gt; For $(B 'g') ($(B 'G')):
            &lt;dd&gt; Do not elide trailing zeros.
        &lt;/dl&gt;

        &lt;dt&gt;$(B '0')
        &lt;dd&gt; For integer and floating point formatting when not nan or
        infinity, use leading zeros
        to pad rather than spaces.
        Ignore if there's a $(I Precision).

        &lt;dt&gt;$(B ' ')
        &lt;dd&gt;Prefix positive numbers in a signed conversion with a space.
    &lt;/dl&gt;

    &lt;dt&gt;$(I Width)
    &lt;dd&gt;
    Specifies the minimum field width.
    If the width is a $(B *), the next argument, which must be
    of type $(B int), is taken as the width.
    If the width is negative, it is as if the $(B -) was given
    as a $(I Flags) character.

    &lt;dt&gt;$(I Precision)
    &lt;dd&gt; Gives the precision for numeric conversions.
    If the precision is a $(B *), the next argument, which must be
    of type $(B int), is taken as the precision. If it is negative,
    it is as if there was no $(I Precision).

    &lt;dt&gt;$(I FormatChar)
    &lt;dd&gt;
    &lt;dl&gt;
        &lt;dt&gt;$(B 's')
        &lt;dd&gt;The corresponding argument is formatted in a manner consistent
        with its type:
        &lt;dl&gt;
            &lt;dt&gt;$(B bool)
            &lt;dd&gt;The result is &lt;tt&gt;'true'&lt;/tt&gt; or &lt;tt&gt;'false'&lt;/tt&gt;.
            &lt;dt&gt;integral types
            &lt;dd&gt;The $(B %d) format is used.
            &lt;dt&gt;floating point types
            &lt;dd&gt;The $(B %g) format is used.
            &lt;dt&gt;string types
            &lt;dd&gt;The result is the string converted to UTF-8.
            A $(I Precision) specifies the maximum number of characters
            to use in the result.
            &lt;dt&gt;classes derived from $(B Object)
            &lt;dd&gt;The result is the string returned from the class instance's
            $(B .toString()) method.
            A $(I Precision) specifies the maximum number of characters
            to use in the result.
            &lt;dt&gt;non-string static and dynamic arrays
            &lt;dd&gt;The result is [s&lt;sub&gt;0&lt;/sub&gt;, s&lt;sub&gt;1&lt;/sub&gt;, ...]
            where s&lt;sub&gt;k&lt;/sub&gt; is the kth element 
            formatted with the default format.
        &lt;/dl&gt;

        &lt;dt&gt;$(B 'b','d','o','x','X')
        &lt;dd&gt; The corresponding argument must be an integral type
        and is formatted as an integer. If the argument is a signed type
        and the $(I FormatChar) is $(B d) it is converted to
        a signed string of characters, otherwise it is treated as
        unsigned. An argument of type $(B bool) is formatted as '1'
        or '0'. The base used is binary for $(B b), octal for $(B o),
        decimal
        for $(B d), and hexadecimal for $(B x) or $(B X).
        $(B x) formats using lower case letters, $(B X) uppercase.
        If there are fewer resulting digits than the $(I Precision),
        leading zeros are used as necessary.
        If the $(I Precision) is 0 and the number is 0, no digits
        result.

        &lt;dt&gt;$(B 'e','E')
        &lt;dd&gt; A floating point number is formatted as one digit before
        the decimal point, $(I Precision) digits after, the $(I FormatChar),
        &amp;plusmn;, followed by at least a two digit exponent: $(I d.dddddd)e$(I &amp;plusmn;dd).
        If there is no $(I Precision), six
        digits are generated after the decimal point.
        If the $(I Precision) is 0, no decimal point is generated.

        &lt;dt&gt;$(B 'f','F')
        &lt;dd&gt; A floating point number is formatted in decimal notation.
        The $(I Precision) specifies the number of digits generated
        after the decimal point. It defaults to six. At least one digit
        is generated before the decimal point. If the $(I Precision)
        is zero, no decimal point is generated.

        &lt;dt&gt;$(B 'g','G')
        &lt;dd&gt; A floating point number is formatted in either $(B e) or
        $(B f) format for $(B g); $(B E) or $(B F) format for
        $(B G).
        The $(B f) format is used if the exponent for an $(B e) format
        is greater than -5 and less than the $(I Precision).
        The $(I Precision) specifies the number of significant
        digits, and defaults to six.
        Trailing zeros are elided after the decimal point, if the fractional
        part is zero then no decimal point is generated.

        &lt;dt&gt;$(B 'a','A')
        &lt;dd&gt; A floating point number is formatted in hexadecimal
        exponential notation 0x$(I h.hhhhhh)p$(I &amp;plusmn;d).
        There is one hexadecimal digit before the decimal point, and as
        many after as specified by the $(I Precision).
        If the $(I Precision) is zero, no decimal point is generated.
        If there is no $(I Precision), as many hexadecimal digits as
        necessary to exactly represent the mantissa are generated.
        The exponent is written in as few digits as possible,
        but at least one, is in decimal, and represents a power of 2 as in
        $(I h.hhhhhh)*2&lt;sup&gt;$(I &amp;plusmn;d)&lt;/sup&gt;.
        The exponent for zero is zero.
        The hexadecimal digits, x and p are in upper case if the
        $(I FormatChar) is upper case.
    &lt;/dl&gt;

    Floating point NaN's are formatted as $(B nan) if the
    $(I FormatChar) is lower case, or $(B NAN) if upper.
    Floating point infinities are formatted as $(B inf) or
    $(B infinity) if the
    $(I FormatChar) is lower case, or $(B INF) or $(B INFINITY) if upper.
    &lt;/dl&gt;

Example:

-------------------------
import std.c.stdio;
import std.format;

void myPrint(...)
{
    void putc(char c)
    {
        fputc(c, stdout);
    }

    std.format.doFormat(&amp;putc, _arguments, _argptr);
}

...

int x = 27;
// prints 'The answer is 27:6'
myPrint("The answer is %s:", x, 6);
------------------------
 */</span>

<span class="d Function"><span class="t Integral"><span class="k">void</span></span> <span class="i">doFormat</span><span class="o Parameters">(<span class="o Parameter"><span class="t Integral"><span class="k">void</span></span> <span class="t Delegate"><span class="k">delegate</span><span class="o Parameters">(<span class="o Parameter"><span class="t Integral"><span class="k">dchar</span></span></span>)</span></span> <span class="i">putc</span></span>, <span class="o Parameter"><span class="t Identifier"><span class="i">TypeInfo</span></span><span class="t Array">[]</span> <span class="i">arguments</span></span>, <span class="o Parameter"><span class="t Identifier"><span class="i">va_list</span></span> <span class="i">argptr</span></span>)</span>
<span class="s FuncBody"><span class="s Compound">{   <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">j</span>;</span></span>
    <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">TypeInfo</span></span> <span class="i">ti</span>;</span></span>
    <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">Mangle</span></span> <span class="i">m</span>;</span></span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">uint</span></span> <span class="i">flags</span>;</span></span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">field_width</span>;</span></span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">precision</span>;</span></span>

    <span class="s Declaration"><span class="d Enum"><span class="k">enum</span> : <span class="t Integral"><span class="k">uint</span></span>
    {
        <span class="d EnumMember"><span class="i">FLdash</span> = <span class="e Int"><span class="n">1</span></span></span>,
        <span class="d EnumMember"><span class="i">FLplus</span> = <span class="e Int"><span class="n">2</span></span></span>,
        <span class="d EnumMember"><span class="i">FLspace</span> = <span class="e Int"><span class="n">4</span></span></span>,
        <span class="d EnumMember"><span class="i">FLhash</span> = <span class="e Int"><span class="n">8</span></span></span>,
        <span class="d EnumMember"><span class="i">FLlngdbl</span> = <span class="e Int"><span class="n">0x20</span></span></span>,
        <span class="d EnumMember"><span class="i">FL0pad</span> = <span class="e Int"><span class="n">0x40</span></span></span>,
        <span class="d EnumMember"><span class="i">FLprecision</span> = <span class="e Int"><span class="n">0x80</span></span></span>,
    }</span></span>

    <span class="d StorageClass"><span class="k">static</span> <span class="d Function"><span class="t Identifier"><span class="i">TypeInfo</span></span> <span class="i">skipCI</span><span class="o Parameters">(<span class="o Parameter"><span class="t Identifier"><span class="i">TypeInfo</span></span> <span class="i">valti</span></span>)</span>
    <span class="s FuncBody"><span class="s Compound">{
      <span class="s While"><span class="k">while</span> (<span class="e Int"><span class="n">1</span></span>)
      <span class="s Compound">{
        <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">valti</span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>.<span class="e Identifier"><span class="i">length</span></span></span> == <span class="e Int"><span class="n">18</span></span></span> &amp;&amp;
            <span class="e Equal"><span class="e Slice"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">valti</span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>[<span class="e Int"><span class="n">9</span></span>..<span class="e Int"><span class="n">18</span></span>]</span> == <span class="e String"><span class="sl">"Invariant"</span></span></span></span>)
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">valti</span></span> =        <span class="e Dot"><span class="e Paren">(<span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">TypeInfo_Invariant</span></span>)<span class="e Identifier"><span class="i">valti</span></span></span>)</span>.<span class="e Identifier"><span class="i">next</span></span></span></span>;</span>
        <span class="k">else</span> <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">valti</span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>.<span class="e Identifier"><span class="i">length</span></span></span> == <span class="e Int"><span class="n">14</span></span></span> &amp;&amp;
            <span class="e Equal"><span class="e Slice"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">valti</span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>[<span class="e Int"><span class="n">9</span></span>..<span class="e Int"><span class="n">14</span></span>]</span> == <span class="e String"><span class="sl">"Const"</span></span></span></span>)
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">valti</span></span> =        <span class="e Dot"><span class="e Paren">(<span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">TypeInfo_Const</span></span>)<span class="e Identifier"><span class="i">valti</span></span></span>)</span>.<span class="e Identifier"><span class="i">next</span></span></span></span>;</span>
        <span class="k">else</span>
            <span class="s Break"><span class="k">break</span>;</span></span></span>
      }</span></span>
      <span class="s Return"><span class="k">return</span> <span class="e Identifier"><span class="i">valti</span></span>;</span>
    }</span></span></span></span>

    <span class="s Declaration"><span class="d Function"><span class="t Integral"><span class="k">void</span></span> <span class="i">formatArg</span><span class="o Parameters">(<span class="o Parameter"><span class="t Integral"><span class="k">char</span></span> <span class="i">fc</span></span>)</span>
    <span class="s FuncBody"><span class="s Compound">{
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">bool</span></span> <span class="i">vbit</span>;</span></span>
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">ulong</span></span> <span class="i">vnumber</span>;</span></span>
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">char</span></span> <span class="i">vchar</span>;</span></span>
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">dchar</span></span> <span class="i">vdchar</span>;</span></span>
        <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">Object</span></span> <span class="i">vobject</span>;</span></span>
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">real</span></span> <span class="i">vreal</span>;</span></span>
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">creal</span></span> <span class="i">vcreal</span>;</span></span>
        <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">Mangle</span></span> <span class="i">m2</span>;</span></span>
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">signed</span> = <span class="e Int"><span class="n">0</span></span>;</span></span>
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">uint</span></span> <span class="i">base</span> = <span class="e Int"><span class="n">10</span></span>;</span></span>
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">uc</span>;</span></span>
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">char</span></span><span class="t Array">[<span class="e Mul"><span class="e TypeDotId"><span class="t Integral"><span class="k">ulong</span></span>.<span class="i">sizeof</span></span> * <span class="e Int"><span class="n">8</span></span></span>]</span> <span class="i">tmpbuf</span>;</span></span>        <span class="lc">// long enough to print long in binary</span>
        <span class="d Variables"><span class="t Const"><span class="k">const</span>(<span class="t Integral"><span class="k">char</span></span>)</span><span class="t Pointer">*</span> <span class="i">prefix</span> = <span class="e String"><span class="sl">""</span></span>;</span>
        <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">string</span></span> <span class="i">s</span>;</span></span>

        <span class="s Declaration"><span class="d Function"><span class="t Integral"><span class="k">void</span></span> <span class="i">putstr</span><span class="o Parameters">(<span class="o Parameter"><span class="k">const</span> <span class="t Integral"><span class="k">char</span></span><span class="t Array">[]</span> <span class="i">s</span></span>)</span>
        <span class="s FuncBody"><span class="s Compound">{
            <span class="lc">//printf("flags = x%x\n", flags);</span>
            <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">prepad</span> = <span class="e Int"><span class="n">0</span></span>;</span></span>
            <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">postpad</span> = <span class="e Int"><span class="n">0</span></span>;</span></span>
            <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">padding</span> = <span class="e Minus"><span class="e Identifier"><span class="i">field_width</span></span> - <span class="e Paren">(<span class="e Plus"><span class="e Call"><span class="e Identifier"><span class="i">strlen</span></span>(<span class="i">prefix</span>)</span> + <span class="e Call"><span class="e Identifier"><span class="i">toUCSindex</span></span>(<span class="i">s</span>, <span class="i">s</span>.<span class="i">length</span>)</span></span>)</span></span>;</span></span>
            <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">padding</span></span> &gt; <span class="e Int"><span class="n">0</span></span></span>)
            <span class="s Compound">{
                <span class="s If"><span class="k">if</span> (<span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLdash</span></span></span>)
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">postpad</span></span> = <span class="e Identifier"><span class="i">padding</span></span></span>;</span>
                <span class="k">else</span>
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">prepad</span></span> = <span class="e Identifier"><span class="i">padding</span></span></span>;</span></span>
            }</span></span>

            <span class="s If"><span class="k">if</span> (<span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FL0pad</span></span></span>)
            <span class="s Compound">{
                <span class="s While"><span class="k">while</span> (<span class="e Deref">*<span class="e Identifier"><span class="i">prefix</span></span></span>)
                    <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putc</span></span>(*<span class="i">prefix</span>++)</span>;</span></span>
                <span class="s While"><span class="k">while</span> (<span class="e PostDecr"><span class="e Identifier"><span class="i">prepad</span></span>--</span>)
                    <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putc</span></span>(<span class="cl">'0'</span>)</span>;</span></span>
            }</span>
            <span class="k">else</span>
            <span class="s Compound">{
                <span class="s While"><span class="k">while</span> (<span class="e PostDecr"><span class="e Identifier"><span class="i">prepad</span></span>--</span>)
                    <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putc</span></span>(<span class="cl">' '</span>)</span>;</span></span>
                <span class="s While"><span class="k">while</span> (<span class="e Deref">*<span class="e Identifier"><span class="i">prefix</span></span></span>)
                    <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putc</span></span>(*<span class="i">prefix</span>++)</span>;</span></span>
            }</span></span>

            <span class="s Foreach"><span class="k">foreach</span> (<span class="o Parameters"><span class="o Parameter"><span class="t Integral"><span class="k">dchar</span></span> <span class="i">c</span></span></span>; <span class="e Identifier"><span class="i">s</span></span>)
                <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putc</span></span>(<span class="i">c</span>)</span>;</span></span>

            <span class="s While"><span class="k">while</span> (<span class="e PostDecr"><span class="e Identifier"><span class="i">postpad</span></span>--</span>)
                <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putc</span></span>(<span class="cl">' '</span>)</span>;</span></span>
        }</span></span></span></span>

        <span class="s Declaration"><span class="d Function"><span class="t Integral"><span class="k">void</span></span> <span class="i">putreal</span><span class="o Parameters">(<span class="o Parameter"><span class="t Integral"><span class="k">real</span></span> <span class="i">v</span></span>)</span>
        <span class="s FuncBody"><span class="s Compound">{
            <span class="lc">//printf("putreal %Lg\n", vreal);</span>

            <span class="s Switch"><span class="k">switch</span> (<span class="e Identifier"><span class="i">fc</span></span>)
            <span class="s Compound">{
                <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'s'</span></span>:
                    <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">fc</span></span> = <span class="e Char"><span class="cl">'g'</span></span></span>;</span>
                    <span class="s Break"><span class="k">break</span>;</span></span></span></span>

                <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'f'</span></span>, <span class="e Char"><span class="cl">'F'</span></span>, <span class="e Char"><span class="cl">'e'</span></span>, <span class="e Char"><span class="cl">'E'</span></span>, <span class="e Char"><span class="cl">'g'</span></span>, <span class="e Char"><span class="cl">'G'</span></span>, <span class="e Char"><span class="cl">'a'</span></span>, <span class="e Char"><span class="cl">'A'</span></span>:
                    <span class="s Scope"><span class="s Compound"><span class="s Break"><span class="k">break</span>;</span></span></span></span>

                <span class="s Default"><span class="k">default</span>:
                    <span class="lc">//printf("fc = '%c'\n", fc);</span>
                <span class="s Scope"><span class="s Compound"><span class="s Labeled"><span class="i">Lerror</span>:
                    <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>(<span class="e String"><span class="sl">"floating"</span></span>)</span>;</span></span></span></span></span>
            }</span></span>
            <span class="s Version"><span class="k">version</span> (<span class="i">DigitalMarsC</span>)
            <span class="s Compound">{
                <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">sl</span>;</span></span>
                <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">char</span></span><span class="t Array">[]</span> <span class="i">fbuf</span> = <span class="e Identifier"><span class="i">tmpbuf</span></span>;</span></span>
                <span class="s If"><span class="k">if</span> (<span class="e Not">!<span class="e Paren">(<span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLprecision</span></span></span>)</span></span>)
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">precision</span></span> = <span class="e Int"><span class="n">6</span></span></span>;</span></span>
                <span class="s While"><span class="k">while</span> (<span class="e Int"><span class="n">1</span></span>)
                <span class="s Compound">{
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">sl</span></span> = <span class="e Dot"><span class="e Identifier"><span class="i">fbuf</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>;</span>
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">prefix</span></span> = <span class="e Call"><span class="e Paren">(<span class="e Deref">*<span class="e Identifier"><span class="i">__pfloatfmt</span></span></span>)</span>(<span class="i">fc</span>, <span class="i">flags</span> | <span class="i">FLlngdbl</span>,
                            <span class="i">precision</span>, &amp;<span class="i">v</span>, <span class="k">cast</span>(<span class="k">char</span>*)<span class="i">fbuf</span>, &amp;<span class="i">sl</span>, <span class="i">field_width</span>)</span></span>;</span>
                    <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">sl</span></span> != <span class="e Sign">-<span class="e Int"><span class="n">1</span></span></span></span>)
                        <span class="s Break"><span class="k">break</span>;</span></span>
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">sl</span></span> = <span class="e Mul"><span class="e Dot"><span class="e Identifier"><span class="i">fbuf</span></span>.<span class="e Identifier"><span class="i">length</span></span></span> * <span class="e Int"><span class="n">2</span></span></span></span>;</span>
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">fbuf</span></span> = <span class="e Slice"><span class="e Paren">(<span class="e Call"><span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">char</span></span><span class="t Pointer">*</span>)<span class="e Identifier"><span class="i">alloca</span></span></span>(<span class="i">sl</span> * <span class="k">char</span>.<span class="i">sizeof</span>)</span>)</span>[<span class="e Int"><span class="n">0</span></span> .. <span class="e Identifier"><span class="i">sl</span></span>]</span></span>;</span>
                }</span></span>
                <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putstr</span></span>(<span class="i">fbuf</span>[<span class="n">0</span> .. <span class="i">sl</span>])</span>;</span>
            }</span>
            <span class="k">else</span>
            <span class="s Compound">{
                <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">sl</span>;</span></span>
                <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">char</span></span><span class="t Array">[]</span> <span class="i">fbuf</span> = <span class="e Identifier"><span class="i">tmpbuf</span></span>;</span></span>
                <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">char</span></span><span class="t Array">[<span class="e Int"><span class="n">12</span></span>]</span> <span class="i">format</span>;</span></span>
                <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">format</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e Char"><span class="cl">'%'</span></span></span>;</span>
                <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">i</span> = <span class="e Int"><span class="n">1</span></span>;</span></span>
                <span class="s If"><span class="k">if</span> (<span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLdash</span></span></span>)
                    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">format</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">i</span></span>++</span>]</span> = <span class="e Char"><span class="cl">'-'</span></span></span>;</span></span>
                <span class="s If"><span class="k">if</span> (<span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLplus</span></span></span>)
                    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">format</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">i</span></span>++</span>]</span> = <span class="e Char"><span class="cl">'+'</span></span></span>;</span></span>
                <span class="s If"><span class="k">if</span> (<span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLspace</span></span></span>)
                    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">format</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">i</span></span>++</span>]</span> = <span class="e Char"><span class="cl">' '</span></span></span>;</span></span>
                <span class="s If"><span class="k">if</span> (<span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLhash</span></span></span>)
                    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">format</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">i</span></span>++</span>]</span> = <span class="e Char"><span class="cl">'#'</span></span></span>;</span></span>
                <span class="s If"><span class="k">if</span> (<span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FL0pad</span></span></span>)
                    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">format</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">i</span></span>++</span>]</span> = <span class="e Char"><span class="cl">'0'</span></span></span>;</span></span>
                <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">format</span></span>[<span class="e Plus"><span class="e Identifier"><span class="i">i</span></span> + <span class="e Int"><span class="n">0</span></span></span>]</span> = <span class="e Char"><span class="cl">'*'</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">format</span></span>[<span class="e Plus"><span class="e Identifier"><span class="i">i</span></span> + <span class="e Int"><span class="n">1</span></span></span>]</span> = <span class="e Char"><span class="cl">'.'</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">format</span></span>[<span class="e Plus"><span class="e Identifier"><span class="i">i</span></span> + <span class="e Int"><span class="n">2</span></span></span>]</span> = <span class="e Char"><span class="cl">'*'</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">format</span></span>[<span class="e Plus"><span class="e Identifier"><span class="i">i</span></span> + <span class="e Int"><span class="n">3</span></span></span>]</span> = <span class="e Char"><span class="cl">'L'</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">format</span></span>[<span class="e Plus"><span class="e Identifier"><span class="i">i</span></span> + <span class="e Int"><span class="n">4</span></span></span>]</span> = <span class="e Identifier"><span class="i">fc</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">format</span></span>[<span class="e Plus"><span class="e Identifier"><span class="i">i</span></span> + <span class="e Int"><span class="n">5</span></span></span>]</span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
                <span class="s If"><span class="k">if</span> (<span class="e Not">!<span class="e Paren">(<span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLprecision</span></span></span>)</span></span>)
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">precision</span></span> = <span class="e Sign">-<span class="e Int"><span class="n">1</span></span></span></span>;</span></span>
                <span class="s While"><span class="k">while</span> (<span class="e Int"><span class="n">1</span></span>)
                <span class="s Compound">{   <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">n</span>;</span></span>

                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">sl</span></span> = <span class="e Dot"><span class="e Identifier"><span class="i">fbuf</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>;</span>
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">n</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">snprintf</span></span>(<span class="i">fbuf</span>.<span class="i">ptr</span>, <span class="i">sl</span>, <span class="i">format</span>.<span class="i">ptr</span>, <span class="i">field_width</span>, <span class="i">precision</span>, <span class="i">v</span>)</span></span>;</span>
                    <span class="lc">//printf("format = '%s', n = %d\n", cast(char*)format, n);</span>
                    <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e Rel"><span class="e Identifier"><span class="i">n</span></span> &gt;= <span class="e Int"><span class="n">0</span></span></span> &amp;&amp; <span class="e Rel"><span class="e Identifier"><span class="i">n</span></span> &lt; <span class="e Identifier"><span class="i">sl</span></span></span></span>)
                    <span class="s Compound">{        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">sl</span></span> = <span class="e Identifier"><span class="i">n</span></span></span>;</span>
                        <span class="s Break"><span class="k">break</span>;</span>
                    }</span></span>
                    <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">n</span></span> &lt; <span class="e Int"><span class="n">0</span></span></span>)
                        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">sl</span></span> = <span class="e Mul"><span class="e Identifier"><span class="i">sl</span></span> * <span class="e Int"><span class="n">2</span></span></span></span>;</span>
                    <span class="k">else</span>
                        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">sl</span></span> = <span class="e Plus"><span class="e Identifier"><span class="i">n</span></span> + <span class="e Int"><span class="n">1</span></span></span></span>;</span></span>
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">fbuf</span></span> = <span class="e Slice"><span class="e Paren">(<span class="e Call"><span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">char</span></span><span class="t Pointer">*</span>)<span class="e Identifier"><span class="i">alloca</span></span></span>(<span class="i">sl</span> * <span class="k">char</span>.<span class="i">sizeof</span>)</span>)</span>[<span class="e Int"><span class="n">0</span></span> .. <span class="e Identifier"><span class="i">sl</span></span>]</span></span>;</span>
                }</span></span>
                <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putstr</span></span>(<span class="i">fbuf</span>[<span class="n">0</span> .. <span class="i">sl</span>])</span>;</span>
            }</span></span>
            <span class="s Return"><span class="k">return</span>;</span>
        }</span></span></span></span>

        <span class="d StorageClass"><span class="k">static</span> <span class="d Function"><span class="t Identifier"><span class="i">Mangle</span></span> <span class="i">getMan</span><span class="o Parameters">(<span class="o Parameter"><span class="t Identifier"><span class="i">TypeInfo</span></span> <span class="i">ti</span></span>)</span>
        <span class="s FuncBody"><span class="s Compound">{
          <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">m</span> = <span class="e Index"><span class="e Dot"><span class="e Dot"><span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">Mangle</span></span>)<span class="e Identifier"><span class="i">ti</span></span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>[<span class="e Int"><span class="n">9</span></span>]</span>;</span></span>
          <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">ti</span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>.<span class="e Identifier"><span class="i">length</span></span></span> == <span class="e Int"><span class="n">20</span></span></span> &amp;&amp;
              <span class="e Equal"><span class="e Slice"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">ti</span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>[<span class="e Int"><span class="n">9</span></span>..<span class="e Int"><span class="n">20</span></span>]</span> == <span class="e String"><span class="sl">"StaticArray"</span></span></span></span>)
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">m</span></span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">Mangle</span></span>)<span class="e Char"><span class="cl">'G'</span></span></span></span>;</span></span>
          <span class="s Return"><span class="k">return</span> <span class="e Identifier"><span class="i">m</span></span>;</span>
        }</span></span></span></span>

        <span class="s Declaration"><span class="d Function"><span class="t Integral"><span class="k">void</span></span> <span class="i">putArray</span><span class="o Parameters">(<span class="o Parameter"><span class="t Integral"><span class="k">void</span></span><span class="t Pointer">*</span> <span class="i">p</span></span>, <span class="o Parameter"><span class="t Identifier"><span class="i">size_t</span></span> <span class="i">len</span></span>, <span class="o Parameter"><span class="t Identifier"><span class="i">TypeInfo</span></span> <span class="i">valti</span></span>)</span>
        <span class="s FuncBody"><span class="s Compound">{
          <span class="lc">//printf("\nputArray(len = %u), tsize = %u\n", len, valti.tsize());</span>
          <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putc</span></span>(<span class="cl">'['</span>)</span>;</span>
          <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">valti</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">skipCI</span></span>(<span class="i">valti</span>)</span></span>;</span>
          <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">size_t</span></span> <span class="i">tsize</span> = <span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">valti</span></span>.<span class="e Identifier"><span class="i">tsize</span></span></span>()</span>;</span></span>
          <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">argptrSave</span> = <span class="e Identifier"><span class="i">argptr</span></span>;</span></span>
          <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">tiSave</span> = <span class="e Identifier"><span class="i">ti</span></span>;</span></span>
          <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">mSave</span> = <span class="e Identifier"><span class="i">m</span></span>;</span></span>
          <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Identifier"><span class="i">valti</span></span></span>;</span>
          <span class="lc">//printf("\n%.*s\n", valti.classinfo.name);</span>
          <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">m</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">getMan</span></span>(<span class="i">valti</span>)</span></span>;</span>
          <span class="s While"><span class="k">while</span> (<span class="e PostDecr"><span class="e Identifier"><span class="i">len</span></span>--</span>)
          <span class="s Compound">{
            <span class="lc">//doFormat(putc, (&amp;valti)[0 .. 1], p);</span>
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">argptr</span></span> = <span class="e Identifier"><span class="i">p</span></span></span>;</span>
            <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatArg</span></span>(<span class="cl">'s'</span>)</span>;</span>

            <span class="s Expression"><span class="e PlusAssign"><span class="e Identifier"><span class="i">p</span></span> += <span class="e Identifier"><span class="i">tsize</span></span></span>;</span>
            <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">len</span></span> &gt; <span class="e Int"><span class="n">0</span></span></span>) <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putc</span></span>(<span class="cl">','</span>)</span>;</span></span>
          }</span></span>
          <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">m</span></span> = <span class="e Identifier"><span class="i">mSave</span></span></span>;</span>
          <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Identifier"><span class="i">tiSave</span></span></span>;</span>
          <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">argptr</span></span> = <span class="e Identifier"><span class="i">argptrSave</span></span></span>;</span>
          <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putc</span></span>(<span class="cl">']'</span>)</span>;</span>
        }</span></span></span></span>

        <span class="s Declaration"><span class="d Function"><span class="t Integral"><span class="k">void</span></span> <span class="i">putAArray</span><span class="o Parameters">(<span class="o Parameter"><span class="t Integral"><span class="k">ubyte</span></span><span class="t Array">[<span class="t Integral"><span class="k">long</span></span>]</span> <span class="i">vaa</span></span>, <span class="o Parameter"><span class="t Identifier"><span class="i">TypeInfo</span></span> <span class="i">valti</span></span>, <span class="o Parameter"><span class="t Identifier"><span class="i">TypeInfo</span></span> <span class="i">keyti</span></span>)</span>
        <span class="s FuncBody"><span class="s Compound">{
          <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putc</span></span>(<span class="cl">'['</span>)</span>;</span>
          <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">bool</span></span> <span class="i">comma</span>=<span class="e Bool"><span class="k">false</span></span>;</span></span>
          <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">argptrSave</span> = <span class="e Identifier"><span class="i">argptr</span></span>;</span></span>
          <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">tiSave</span> = <span class="e Identifier"><span class="i">ti</span></span>;</span></span>
          <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">mSave</span> = <span class="e Identifier"><span class="i">m</span></span>;</span></span>
          <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">valti</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">skipCI</span></span>(<span class="i">valti</span>)</span></span>;</span>
          <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">keyti</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">skipCI</span></span>(<span class="i">keyti</span>)</span></span>;</span>
          <span class="s Foreach"><span class="k">foreach</span>(<span class="o Parameters"><span class="o Parameter"><span class="k">inout</span> <span class="i">fakevalue</span></span></span>; <span class="e Identifier"><span class="i">vaa</span></span>)
          <span class="s Compound">{
            <span class="s If"><span class="k">if</span> (<span class="e Identifier"><span class="i">comma</span></span>) <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putc</span></span>(<span class="cl">','</span>)</span>;</span></span>
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">comma</span></span> = <span class="e Bool"><span class="k">true</span></span></span>;</span>
            <span class="lc">// the key comes before the value</span>
            <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">ubyte</span></span><span class="t Pointer">*</span> <span class="i">key</span> = <span class="e Minus"><span class="e Address">&amp;<span class="e Identifier"><span class="i">fakevalue</span></span></span> - <span class="e TypeDotId"><span class="t Integral"><span class="k">long</span></span>.<span class="i">sizeof</span></span></span>;</span></span>

            <span class="lc">//doFormat(putc, (&amp;keyti)[0..1], key);</span>
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">argptr</span></span> = <span class="e Identifier"><span class="i">key</span></span></span>;</span>
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Identifier"><span class="i">keyti</span></span></span>;</span>
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">m</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">getMan</span></span>(<span class="i">keyti</span>)</span></span>;</span>
            <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatArg</span></span>(<span class="cl">'s'</span>)</span>;</span>

            <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putc</span></span>(<span class="cl">':'</span>)</span>;</span>
            <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">keysize</span> = <span class="e Dot"><span class="e Identifier"><span class="i">keyti</span></span>.<span class="e Identifier"><span class="i">tsize</span></span></span>;</span></span>
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">keysize</span></span> = <span class="e And"><span class="e Paren">(<span class="e Plus"><span class="e Identifier"><span class="i">keysize</span></span> + <span class="e Int"><span class="n">3</span></span></span>)</span> &amp; <span class="e Comp">~<span class="e Int"><span class="n">3</span></span></span></span></span>;</span>
            <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">ubyte</span></span><span class="t Pointer">*</span> <span class="i">value</span> = <span class="e Plus"><span class="e Identifier"><span class="i">key</span></span> + <span class="e Identifier"><span class="i">keysize</span></span></span>;</span></span>
            <span class="lc">//doFormat(putc, (&amp;valti)[0..1], value);</span>
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">argptr</span></span> = <span class="e Identifier"><span class="i">value</span></span></span>;</span>
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Identifier"><span class="i">valti</span></span></span>;</span>
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">m</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">getMan</span></span>(<span class="i">valti</span>)</span></span>;</span>
            <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatArg</span></span>(<span class="cl">'s'</span>)</span>;</span>
          }</span></span>
          <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">m</span></span> = <span class="e Identifier"><span class="i">mSave</span></span></span>;</span>
          <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Identifier"><span class="i">tiSave</span></span></span>;</span>
          <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">argptr</span></span> = <span class="e Identifier"><span class="i">argptrSave</span></span></span>;</span>
          <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putc</span></span>(<span class="cl">']'</span>)</span>;</span>
        }</span></span></span></span>

        <span class="lc">//printf("formatArg(fc = '%c', m = '%c')\n", fc, m);</span>
        <span class="s Switch"><span class="k">switch</span> (<span class="e Identifier"><span class="i">m</span></span>)
        <span class="s Compound">{
            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tbool</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vbit</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">bool</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">fc</span></span> != <span class="e Char"><span class="cl">'s'</span></span></span>)
                <span class="s Compound">{   <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vnumber</span></span> = <span class="e Identifier"><span class="i">vbit</span></span></span>;</span>
                    <span class="s Goto"><span class="k">goto</span> <span class="i">Lnumber</span>;</span>
                }</span></span>
                <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putstr</span></span>(<span class="i">vbit</span> ? <span class="sl">"true"</span> : <span class="sl">"false"</span>)</span>;</span>
                <span class="s Return"><span class="k">return</span>;</span></span></span></span>


            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tchar</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vchar</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">char</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">fc</span></span> != <span class="e Char"><span class="cl">'s'</span></span></span>)
                <span class="s Compound">{   <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vnumber</span></span> = <span class="e Identifier"><span class="i">vchar</span></span></span>;</span>
                    <span class="s Goto"><span class="k">goto</span> <span class="i">Lnumber</span>;</span>
                }</span></span>
            <span class="s Labeled"><span class="i">L2</span>:
                <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putstr</span></span>((&amp;<span class="i">vchar</span>)[<span class="n">0</span> .. <span class="n">1</span>])</span>;</span></span>
                <span class="s Return"><span class="k">return</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Twchar</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vdchar</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">wchar</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">L1</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tdchar</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vdchar</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">dchar</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
            <span class="s Labeled"><span class="i">L1</span>:
                <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">fc</span></span> != <span class="e Char"><span class="cl">'s'</span></span></span>)
                <span class="s Compound">{   <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vnumber</span></span> = <span class="e Identifier"><span class="i">vdchar</span></span></span>;</span>
                    <span class="s Goto"><span class="k">goto</span> <span class="i">Lnumber</span>;</span>
                }</span></span></span>
                <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">vdchar</span></span> &lt;= <span class="e Int"><span class="n">0x7F</span></span></span>)
                <span class="s Compound">{   <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vchar</span></span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">char</span></span>)<span class="e Identifier"><span class="i">vdchar</span></span></span></span>;</span>
                    <span class="s Goto"><span class="k">goto</span> <span class="i">L2</span>;</span>
                }</span>
                <span class="k">else</span>
                <span class="s Compound">{   <span class="s If"><span class="k">if</span> (<span class="e Call"><span class="e Not">!<span class="e Identifier"><span class="i">isValidDchar</span></span></span>(<span class="i">vdchar</span>)</span>)
                        <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">UtfException</span></span>(<span class="e String"><span class="sl">"invalid dchar in format"</span></span>, <span class="e Int"><span class="n">0</span></span>)</span>;</span></span>
                    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">char</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span> <span class="i">vbuf</span>;</span></span>
                    <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putstr</span></span>(<span class="i">toUTF8</span>(<span class="i">vbuf</span>, <span class="i">vdchar</span>))</span>;</span>
                }</span></span>
                <span class="s Return"><span class="k">return</span>;</span></span></span></span>


            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tbyte</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">signed</span></span> = <span class="e Int"><span class="n">1</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vnumber</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">byte</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lnumber</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tubyte</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vnumber</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">ubyte</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lnumber</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tshort</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">signed</span></span> = <span class="e Int"><span class="n">1</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vnumber</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">short</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lnumber</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tushort</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vnumber</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">ushort</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lnumber</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tint</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">signed</span></span> = <span class="e Int"><span class="n">1</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vnumber</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">int</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lnumber</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tuint</span></span></span>:
            <span class="s Scope"><span class="s Compound"><span class="s Labeled"><span class="i">Luint</span>:
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vnumber</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">uint</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span></span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lnumber</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tlong</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">signed</span></span> = <span class="e Int"><span class="n">1</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vnumber</span></span> = <span class="e Call"><span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">ulong</span></span>)<span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">long</span></span></span>)</span></span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lnumber</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tulong</span></span></span>:
            <span class="s Scope"><span class="s Compound"><span class="s Labeled"><span class="i">Lulong</span>:
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vnumber</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">ulong</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span></span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lnumber</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tclass</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vobject</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Identifier"><span class="i">Object</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s If"><span class="k">if</span> (<span class="e Identity"><span class="e Identifier"><span class="i">vobject</span></span> <span class="k">is</span> <span class="e Null"><span class="k">null</span></span></span>)
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e String"><span class="sl">"null"</span></span></span>;</span>
                <span class="k">else</span>
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">vobject</span></span>.<span class="e Identifier"><span class="i">toString</span></span></span>()</span></span>;</span></span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lputstr</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tpointer</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vnumber</span></span> = <span class="e Call"><span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">ulong</span></span>)<span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">void</span></span><span class="t Pointer">*</span></span>)</span></span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">uc</span></span> = <span class="e Int"><span class="n">1</span></span></span>;</span>
                <span class="s Expression"><span class="e OrAssign"><span class="e Identifier"><span class="i">flags</span></span> |= <span class="e Identifier"><span class="i">FL0pad</span></span></span>;</span>
                <span class="s If"><span class="k">if</span> (<span class="e Not">!<span class="e Paren">(<span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLprecision</span></span></span>)</span></span>)
                <span class="s Compound">{   <span class="s Expression"><span class="e OrAssign"><span class="e Identifier"><span class="i">flags</span></span> |= <span class="e Identifier"><span class="i">FLprecision</span></span></span>;</span>
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">precision</span></span> = <span class="e TypeDotId">(<span class="t Integral"><span class="k">void</span></span><span class="t Pointer">*</span>).<span class="i">sizeof</span></span></span>;</span>
                }</span></span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">base</span></span> = <span class="e Int"><span class="n">16</span></span></span>;</span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lnumber</span>;</span></span></span></span>


            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tfloat</span></span></span>:</span></span></span>
            <span class="s Scope"><span class="s Compound"><span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tifloat</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s If"><span class="k">if</span> (<span class="e OrOr"><span class="e Equal"><span class="e Identifier"><span class="i">fc</span></span> == <span class="e Char"><span class="cl">'x'</span></span></span> || <span class="e Equal"><span class="e Identifier"><span class="i">fc</span></span> == <span class="e Char"><span class="cl">'X'</span></span></span></span>)
                    <span class="s Goto"><span class="k">goto</span> <span class="i">Luint</span>;</span></span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vreal</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">float</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lreal</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tdouble</span></span></span>:</span></span></span>
            <span class="s Scope"><span class="s Compound"><span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tidouble</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s If"><span class="k">if</span> (<span class="e OrOr"><span class="e Equal"><span class="e Identifier"><span class="i">fc</span></span> == <span class="e Char"><span class="cl">'x'</span></span></span> || <span class="e Equal"><span class="e Identifier"><span class="i">fc</span></span> == <span class="e Char"><span class="cl">'X'</span></span></span></span>)
                    <span class="s Goto"><span class="k">goto</span> <span class="i">Lulong</span>;</span></span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vreal</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">double</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lreal</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Treal</span></span></span>:</span></span></span>
            <span class="s Scope"><span class="s Compound"><span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tireal</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vreal</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">real</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lreal</span>;</span></span></span></span>


            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tcfloat</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vcreal</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">cfloat</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lcomplex</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tcdouble</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vcreal</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">cdouble</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lcomplex</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tcreal</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vcreal</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">creal</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lcomplex</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tsarray</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putArray</span></span>(<span class="i">argptr</span>, (<span class="k">cast</span>(<span class="i">TypeInfo_StaticArray</span>)<span class="i">ti</span>).<span class="i">len</span>, (<span class="k">cast</span>(<span class="i">TypeInfo_StaticArray</span>)<span class="i">ti</span>).<span class="i">next</span>)</span>;</span>
                <span class="s Return"><span class="k">return</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tarray</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">mi</span> = <span class="e Int"><span class="n">10</span></span>;</span></span>
                <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">ti</span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>.<span class="e Identifier"><span class="i">length</span></span></span> == <span class="e Int"><span class="n">14</span></span></span> &amp;&amp;
                    <span class="e Equal"><span class="e Slice"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">ti</span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>[<span class="e Int"><span class="n">9</span></span>..<span class="e Int"><span class="n">14</span></span>]</span> == <span class="e String"><span class="sl">"Array"</span></span></span></span>) 
                <span class="s Compound">{ <span class="lc">// array of non-primitive types</span>
                  <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">TypeInfo</span></span> <span class="i">tn</span> = <span class="e Dot"><span class="e Paren">(<span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">TypeInfo_Array</span></span>)<span class="e Identifier"><span class="i">ti</span></span></span>)</span>.<span class="e Identifier"><span class="i">next</span></span></span>;</span></span>
                  <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">tn</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">skipCI</span></span>(<span class="i">tn</span>)</span></span>;</span>
                  <span class="s Switch"><span class="k">switch</span> (<span class="e Index"><span class="e Dot"><span class="e Dot"><span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">Mangle</span></span>)<span class="e Identifier"><span class="i">tn</span></span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>[<span class="e Int"><span class="n">9</span></span>]</span>)
                  <span class="s Compound">{
                    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tchar</span></span></span>:  <span class="s Scope"><span class="s Compound"><span class="s Goto"><span class="k">goto</span> <span class="i">LarrayChar</span>;</span></span></span></span>
                    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Twchar</span></span></span>: <span class="s Scope"><span class="s Compound"><span class="s Goto"><span class="k">goto</span> <span class="i">LarrayWchar</span>;</span></span></span></span>
                    <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tdchar</span></span></span>: <span class="s Scope"><span class="s Compound"><span class="s Goto"><span class="k">goto</span> <span class="i">LarrayDchar</span>;</span></span></span></span>
                    <span class="s Default"><span class="k">default</span>:
                        <span class="s Scope"><span class="s Compound"><span class="s Break"><span class="k">break</span>;</span></span></span></span>
                  }</span></span>
                  <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">void</span></span><span class="t Array">[]</span> <span class="i">va</span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">void</span></span><span class="t Array">[]</span></span>)</span>(<span class="i">argptr</span>)</span>;</span></span>
                  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putArray</span></span>(<span class="i">va</span>.<span class="i">ptr</span>, <span class="i">va</span>.<span class="i">length</span>, <span class="i">tn</span>)</span>;</span>
                  <span class="s Return"><span class="k">return</span>;</span>
                }</span></span>
                <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">ti</span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>.<span class="e Identifier"><span class="i">length</span></span></span> == <span class="e Int"><span class="n">25</span></span></span> &amp;&amp;
                    <span class="e Equal"><span class="e Slice"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">ti</span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>[<span class="e Int"><span class="n">9</span></span>..<span class="e Int"><span class="n">25</span></span>]</span> == <span class="e String"><span class="sl">"AssociativeArray"</span></span></span></span>) 
                <span class="s Compound">{ <span class="lc">// associative array</span>
                  <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">ubyte</span></span><span class="t Array">[<span class="t Integral"><span class="k">long</span></span>]</span> <span class="i">vaa</span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">ubyte</span></span><span class="t Array">[<span class="t Integral"><span class="k">long</span></span>]</span></span>)</span>(<span class="i">argptr</span>)</span>;</span></span>
                  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putAArray</span></span>(<span class="i">vaa</span>,
                        (<span class="k">cast</span>(<span class="i">TypeInfo_AssociativeArray</span>)<span class="i">ti</span>).<span class="i">next</span>,
                        (<span class="k">cast</span>(<span class="i">TypeInfo_AssociativeArray</span>)<span class="i">ti</span>).<span class="i">key</span>)</span>;</span>
                  <span class="s Return"><span class="k">return</span>;</span>
                }</span></span>

                <span class="s While"><span class="k">while</span> (<span class="e Int"><span class="n">1</span></span>)
                <span class="s Compound">{
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">m2</span></span> = <span class="e Index"><span class="e Dot"><span class="e Dot"><span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">Mangle</span></span>)<span class="e Identifier"><span class="i">ti</span></span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>[<span class="e Identifier"><span class="i">mi</span></span>]</span></span>;</span>
                    <span class="s Switch"><span class="k">switch</span> (<span class="e Identifier"><span class="i">m2</span></span>)
                    <span class="s Compound">{
                        <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tchar</span></span></span>:
                        <span class="s Scope"><span class="s Compound"><span class="s Labeled"><span class="i">LarrayChar</span>:
                            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Identifier"><span class="i">string</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span></span>
                            <span class="s Goto"><span class="k">goto</span> <span class="i">Lputstr</span>;</span></span></span></span>

                        <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Twchar</span></span></span>:
                        <span class="s Scope"><span class="s Compound"><span class="s Labeled"><span class="i">LarrayWchar</span>:
                            <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">wchar</span></span><span class="t Array">[]</span> <span class="i">sw</span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">wchar</span></span><span class="t Array">[]</span></span>)</span>(<span class="i">argptr</span>)</span>;</span></span></span>
                            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">toUTF8</span></span>(<span class="i">sw</span>)</span></span>;</span>
                            <span class="s Goto"><span class="k">goto</span> <span class="i">Lputstr</span>;</span></span></span></span>

                        <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tdchar</span></span></span>:
                        <span class="s Scope"><span class="s Compound"><span class="s Labeled"><span class="i">LarrayDchar</span>:
                            <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">sd</span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Identifier"><span class="i">dstring</span></span></span>)</span>(<span class="i">argptr</span>)</span>;</span></span></span>
                            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">toUTF8</span></span>(<span class="i">sd</span>)</span></span>;</span>
                        <span class="s Labeled"><span class="i">Lputstr</span>:
                            <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">fc</span></span> != <span class="e Char"><span class="cl">'s'</span></span></span>)
                                <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>(<span class="e String"><span class="sl">"string"</span></span>)</span>;</span></span></span>
                            <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLprecision</span></span></span> &amp;&amp; <span class="e Rel"><span class="e Identifier"><span class="i">precision</span></span> &lt; <span class="e Dot"><span class="e Identifier"><span class="i">s</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span></span>)
                                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Slice"><span class="e Identifier"><span class="i">s</span></span>[<span class="e Int"><span class="n">0</span></span> .. <span class="e Identifier"><span class="i">precision</span></span>]</span></span>;</span></span>
                            <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putstr</span></span>(<span class="i">s</span>)</span>;</span>
                            <span class="s Break"><span class="k">break</span>;</span></span></span></span>

                        <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tconst</span></span></span>:</span></span></span>
                        <span class="s Scope"><span class="s Compound"><span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tinvariant</span></span></span>:
                            <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e PostIncr"><span class="e Identifier"><span class="i">mi</span></span>++</span>;</span>
                            <span class="s Continue"><span class="k">continue</span>;</span></span></span></span>

                        <span class="s Default"><span class="k">default</span>:
                            <span class="s Scope"><span class="s Compound"><span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">TypeInfo</span></span> <span class="i">ti2</span> = <span class="e Call"><span class="e Identifier"><span class="i">primitiveTypeInfo</span></span>(<span class="i">m2</span>)</span>;</span></span>
                            <span class="s If"><span class="k">if</span> (<span class="e Not">!<span class="e Identifier"><span class="i">ti2</span></span></span>)
                              <span class="s Goto"><span class="k">goto</span> <span class="i">Lerror</span>;</span></span>
                            <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">void</span></span><span class="t Array">[]</span> <span class="i">va</span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">void</span></span><span class="t Array">[]</span></span>)</span>(<span class="i">argptr</span>)</span>;</span></span>
                            <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putArray</span></span>(<span class="i">va</span>.<span class="i">ptr</span>, <span class="i">va</span>.<span class="i">length</span>, <span class="i">ti2</span>)</span>;</span></span></span></span>
                    }</span></span>
                    <span class="s Return"><span class="k">return</span>;</span>
                }</span></span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Ttypedef</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Dot"><span class="e Paren">(<span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">TypeInfo_Typedef</span></span>)<span class="e Identifier"><span class="i">ti</span></span></span>)</span>.<span class="e Identifier"><span class="i">base</span></span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">m</span></span> = <span class="e Index"><span class="e Dot"><span class="e Dot"><span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">Mangle</span></span>)<span class="e Identifier"><span class="i">ti</span></span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>[<span class="e Int"><span class="n">9</span></span>]</span></span>;</span>
                <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatArg</span></span>(<span class="i">fc</span>)</span>;</span>
                <span class="s Return"><span class="k">return</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tenum</span></span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Dot"><span class="e Paren">(<span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">TypeInfo_Enum</span></span>)<span class="e Identifier"><span class="i">ti</span></span></span>)</span>.<span class="e Identifier"><span class="i">base</span></span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">m</span></span> = <span class="e Index"><span class="e Dot"><span class="e Dot"><span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">Mangle</span></span>)<span class="e Identifier"><span class="i">ti</span></span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>[<span class="e Int"><span class="n">9</span></span>]</span></span>;</span>
                <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatArg</span></span>(<span class="i">fc</span>)</span>;</span>
                <span class="s Return"><span class="k">return</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tstruct</span></span></span>:
            <span class="s Scope"><span class="s Compound"><span class="s Scope"><span class="s Compound">{        <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">TypeInfo_Struct</span></span> <span class="i">tis</span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">TypeInfo_Struct</span></span>)<span class="e Identifier"><span class="i">ti</span></span></span>;</span></span>
                <span class="s If"><span class="k">if</span> (<span class="e Identity"><span class="e Dot"><span class="e Identifier"><span class="i">tis</span></span>.<span class="e Identifier"><span class="i">xtoString</span></span></span> <span class="k">is</span> <span class="e Null"><span class="k">null</span></span></span>)
                    <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>(<span class="e Cat"><span class="e Cat"><span class="e String"><span class="sl">"Can't convert "</span></span> ~ <span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">tis</span></span>.<span class="e Identifier"><span class="i">toString</span></span></span>()</span></span> ~ <span class="e String"><span class="sl">" to string: \"string toString()\" not defined"</span></span></span>)</span>;</span></span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">tis</span></span>.<span class="e Identifier"><span class="i">xtoString</span></span></span>(<span class="i">argptr</span>)</span></span>;</span>
                <span class="s Expression"><span class="e PlusAssign"><span class="e Identifier"><span class="i">argptr</span></span> += <span class="e And"><span class="e Paren">(<span class="e Plus"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">tis</span></span>.<span class="e Identifier"><span class="i">tsize</span></span></span>()</span> + <span class="e Int"><span class="n">3</span></span></span>)</span> &amp; <span class="e Comp">~<span class="e Int"><span class="n">3</span></span></span></span></span>;</span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lputstr</span>;</span>
            }</span></span></span></span></span>

            <span class="s Default"><span class="k">default</span>:
                <span class="s Scope"><span class="s Compound"><span class="s Goto"><span class="k">goto</span> <span class="i">Lerror</span>;</span></span></span></span>
        }</span></span>

    <span class="s Labeled"><span class="i">Lnumber</span>:
        <span class="s Switch"><span class="k">switch</span> (<span class="e Identifier"><span class="i">fc</span></span>)
        <span class="s Compound">{
            <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'s'</span></span>:</span></span></span>
            <span class="s Scope"><span class="s Compound"><span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'d'</span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s If"><span class="k">if</span> (<span class="e Identifier"><span class="i">signed</span></span>)
                <span class="s Compound">{   <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">long</span></span>)<span class="e Identifier"><span class="i">vnumber</span></span></span> &lt; <span class="e Int"><span class="n">0</span></span></span>)
                    <span class="s Compound">{        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">prefix</span></span> = <span class="e String"><span class="sl">"-"</span></span></span>;</span>
                        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vnumber</span></span> = <span class="e Sign">-<span class="e Identifier"><span class="i">vnumber</span></span></span></span>;</span>
                    }</span>
                    <span class="k">else</span> <span class="s If"><span class="k">if</span> (<span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLplus</span></span></span>)
                        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">prefix</span></span> = <span class="e String"><span class="sl">"+"</span></span></span>;</span>
                    <span class="k">else</span> <span class="s If"><span class="k">if</span> (<span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLspace</span></span></span>)
                        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">prefix</span></span> = <span class="e String"><span class="sl">" "</span></span></span>;</span></span></span></span>
                }</span></span>
                <span class="s Break"><span class="k">break</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'b'</span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">signed</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">base</span></span> = <span class="e Int"><span class="n">2</span></span></span>;</span>
                <span class="s Break"><span class="k">break</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'o'</span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">signed</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">base</span></span> = <span class="e Int"><span class="n">8</span></span></span>;</span>
                <span class="s Break"><span class="k">break</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'X'</span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">uc</span></span> = <span class="e Int"><span class="n">1</span></span></span>;</span>
                <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLhash</span></span></span> &amp;&amp; <span class="e Identifier"><span class="i">vnumber</span></span></span>)
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">prefix</span></span> = <span class="e String"><span class="sl">"0X"</span></span></span>;</span></span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">signed</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">base</span></span> = <span class="e Int"><span class="n">16</span></span></span>;</span>
                <span class="s Break"><span class="k">break</span>;</span></span></span></span>

            <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'x'</span></span>:
                <span class="s Scope"><span class="s Compound"><span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLhash</span></span></span> &amp;&amp; <span class="e Identifier"><span class="i">vnumber</span></span></span>)
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">prefix</span></span> = <span class="e String"><span class="sl">"0x"</span></span></span>;</span></span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">signed</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">base</span></span> = <span class="e Int"><span class="n">16</span></span></span>;</span>
                <span class="s Break"><span class="k">break</span>;</span></span></span></span>

            <span class="s Default"><span class="k">default</span>:
                <span class="s Scope"><span class="s Compound"><span class="s Goto"><span class="k">goto</span> <span class="i">Lerror</span>;</span></span></span></span>
        }</span></span></span>

        <span class="s If"><span class="k">if</span> (<span class="e Not">!<span class="e Identifier"><span class="i">signed</span></span></span>)
        <span class="s Compound">{
            <span class="s Switch"><span class="k">switch</span> (<span class="e Identifier"><span class="i">m</span></span>)
            <span class="s Compound">{
                <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tbyte</span></span></span>:
                    <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e AndAssign"><span class="e Identifier"><span class="i">vnumber</span></span> &amp;= <span class="e Int"><span class="n">0xFF</span></span></span>;</span>
                    <span class="s Break"><span class="k">break</span>;</span></span></span></span>

                <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tshort</span></span></span>:
                    <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e AndAssign"><span class="e Identifier"><span class="i">vnumber</span></span> &amp;= <span class="e Int"><span class="n">0xFFFF</span></span></span>;</span>
                    <span class="s Break"><span class="k">break</span>;</span></span></span></span>

                <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tint</span></span></span>:
                    <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e AndAssign"><span class="e Identifier"><span class="i">vnumber</span></span> &amp;= <span class="e Int"><span class="n">0xFFFFFFFF</span></span></span>;</span>
                    <span class="s Break"><span class="k">break</span>;</span></span></span></span>

                <span class="s Default"><span class="k">default</span>:
                    <span class="s Scope"><span class="s Compound"><span class="s Break"><span class="k">break</span>;</span></span></span></span>
            }</span></span>
        }</span></span>

        <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLprecision</span></span></span> &amp;&amp; <span class="e Equal"><span class="e Identifier"><span class="i">fc</span></span> != <span class="e Char"><span class="cl">'p'</span></span></span></span>)
            <span class="s Expression"><span class="e AndAssign"><span class="e Identifier"><span class="i">flags</span></span> &amp;= <span class="e Comp">~<span class="e Identifier"><span class="i">FL0pad</span></span></span></span>;</span></span>

        <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">vnumber</span></span> &lt; <span class="e Identifier"><span class="i">base</span></span></span>)
        <span class="s Compound">{
            <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e AndAnd"><span class="e AndAnd"><span class="e Equal"><span class="e Identifier"><span class="i">vnumber</span></span> == <span class="e Int"><span class="n">0</span></span></span> &amp;&amp; <span class="e Equal"><span class="e Identifier"><span class="i">precision</span></span> == <span class="e Int"><span class="n">0</span></span></span></span> &amp;&amp; <span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLprecision</span></span></span></span> &amp;&amp;
                <span class="e Not">!<span class="e Paren">(<span class="e AndAnd"><span class="e Equal"><span class="e Identifier"><span class="i">fc</span></span> == <span class="e Char"><span class="cl">'o'</span></span></span> &amp;&amp; <span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLhash</span></span></span></span>)</span></span></span>)
            <span class="s Compound">{
                <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putstr</span></span>(<span class="k">null</span>)</span>;</span>
                <span class="s Return"><span class="k">return</span>;</span>
            }</span></span>
            <span class="s If"><span class="k">if</span> (<span class="e OrOr"><span class="e Equal"><span class="e Identifier"><span class="i">precision</span></span> == <span class="e Int"><span class="n">0</span></span></span> || <span class="e Not">!<span class="e Paren">(<span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLprecision</span></span></span>)</span></span></span>)
            <span class="s Compound">{        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vchar</span></span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">char</span></span>)<span class="e Paren">(<span class="e Plus"><span class="e Char"><span class="cl">'0'</span></span> + <span class="e Identifier"><span class="i">vnumber</span></span></span>)</span></span></span>;</span>
                <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">vnumber</span></span> &lt; <span class="e Int"><span class="n">10</span></span></span>)
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vchar</span></span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">char</span></span>)<span class="e Paren">(<span class="e Plus"><span class="e Char"><span class="cl">'0'</span></span> + <span class="e Identifier"><span class="i">vnumber</span></span></span>)</span></span></span>;</span>
                <span class="k">else</span>
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">vchar</span></span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">char</span></span>)<span class="e Paren">(<span class="e Plus"><span class="e Paren">(<span class="e Cond"><span class="e Identifier"><span class="i">uc</span></span> ? <span class="e Minus"><span class="e Char"><span class="cl">'A'</span></span> - <span class="e Int"><span class="n">10</span></span></span> : <span class="e Minus"><span class="e Char"><span class="cl">'a'</span></span> - <span class="e Int"><span class="n">10</span></span></span></span>)</span> + <span class="e Identifier"><span class="i">vnumber</span></span></span>)</span></span></span>;</span></span>
                <span class="s Goto"><span class="k">goto</span> <span class="i">L2</span>;</span>
            }</span></span>
        }</span></span>

        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">n</span> = <span class="e Dot"><span class="e Identifier"><span class="i">tmpbuf</span></span>.<span class="e Identifier"><span class="i">length</span></span></span>;</span></span>
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">char</span></span> <span class="i">c</span>;</span></span>
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">hexoffset</span> = <span class="e Cond"><span class="e Identifier"><span class="i">uc</span></span> ? <span class="e Paren">(<span class="e Minus"><span class="e Char"><span class="cl">'A'</span></span> - <span class="e Paren">(<span class="e Plus"><span class="e Char"><span class="cl">'9'</span></span> + <span class="e Int"><span class="n">1</span></span></span>)</span></span>)</span> : <span class="e Paren">(<span class="e Minus"><span class="e Char"><span class="cl">'a'</span></span> - <span class="e Paren">(<span class="e Plus"><span class="e Char"><span class="cl">'9'</span></span> + <span class="e Int"><span class="n">1</span></span></span>)</span></span>)</span></span>;</span></span>

        <span class="s While"><span class="k">while</span> (<span class="e Identifier"><span class="i">vnumber</span></span>)
        <span class="s Compound">{
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">c</span></span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">char</span></span>)<span class="e Paren">(<span class="e Plus"><span class="e Paren">(<span class="e Mod"><span class="e Identifier"><span class="i">vnumber</span></span> % <span class="e Identifier"><span class="i">base</span></span></span>)</span> + <span class="e Char"><span class="cl">'0'</span></span></span>)</span></span></span>;</span>
            <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">c</span></span> &gt; <span class="e Char"><span class="cl">'9'</span></span></span>)
                <span class="s Expression"><span class="e PlusAssign"><span class="e Identifier"><span class="i">c</span></span> += <span class="e Identifier"><span class="i">hexoffset</span></span></span>;</span></span>
            <span class="s Expression"><span class="e DivAssign"><span class="e Identifier"><span class="i">vnumber</span></span> /= <span class="e Identifier"><span class="i">base</span></span></span>;</span>
            <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">tmpbuf</span></span>[<span class="e PreDecr">--<span class="e Identifier"><span class="i">n</span></span></span>]</span> = <span class="e Identifier"><span class="i">c</span></span></span>;</span>
        }</span></span>
        <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e Rel"><span class="e Minus"><span class="e Dot"><span class="e Identifier"><span class="i">tmpbuf</span></span>.<span class="e Identifier"><span class="i">length</span></span></span> - <span class="e Identifier"><span class="i">n</span></span></span> &lt; <span class="e Identifier"><span class="i">precision</span></span></span> &amp;&amp; <span class="e Rel"><span class="e Identifier"><span class="i">precision</span></span> &lt; <span class="e Dot"><span class="e Identifier"><span class="i">tmpbuf</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span></span>)
        <span class="s Compound">{
            <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">m</span> = <span class="e Minus"><span class="e Dot"><span class="e Identifier"><span class="i">tmpbuf</span></span>.<span class="e Identifier"><span class="i">length</span></span></span> - <span class="e Identifier"><span class="i">precision</span></span></span>;</span></span>
            <span class="s Expression"><span class="e Assign"><span class="e Slice"><span class="e Identifier"><span class="i">tmpbuf</span></span>[<span class="e Identifier"><span class="i">m</span></span> .. <span class="e Identifier"><span class="i">n</span></span>]</span> = <span class="e Char"><span class="cl">'0'</span></span></span>;</span>
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">n</span></span> = <span class="e Identifier"><span class="i">m</span></span></span>;</span>
        }</span>
        <span class="k">else</span> <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLhash</span></span></span> &amp;&amp; <span class="e Equal"><span class="e Identifier"><span class="i">fc</span></span> == <span class="e Char"><span class="cl">'o'</span></span></span></span>)
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">prefix</span></span> = <span class="e String"><span class="sl">"0"</span></span></span>;</span></span></span>
        <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putstr</span></span>(<span class="i">tmpbuf</span>[<span class="i">n</span> .. <span class="i">tmpbuf</span>.<span class="i">length</span>])</span>;</span>
        <span class="s Return"><span class="k">return</span>;</span>

    <span class="s Labeled"><span class="i">Lreal</span>:
        <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putreal</span></span>(<span class="i">vreal</span>)</span>;</span></span>
        <span class="s Return"><span class="k">return</span>;</span>

    <span class="s Labeled"><span class="i">Lcomplex</span>:
        <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putreal</span></span>(<span class="i">vcreal</span>.<span class="i">re</span>)</span>;</span></span>
        <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putc</span></span>(<span class="cl">'+'</span>)</span>;</span>
        <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putreal</span></span>(<span class="i">vcreal</span>.<span class="i">im</span>)</span>;</span>
        <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putc</span></span>(<span class="cl">'i'</span>)</span>;</span>
        <span class="s Return"><span class="k">return</span>;</span>

    <span class="s Labeled"><span class="i">Lerror</span>:
        <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>(<span class="e String"><span class="sl">"formatArg"</span></span>)</span>;</span></span>
    }</span></span></span></span>


    <span class="s For"><span class="k">for</span> (<span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">j</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span> <span class="e Rel"><span class="e Identifier"><span class="i">j</span></span> &lt; <span class="e Dot"><span class="e Identifier"><span class="i">arguments</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>; )
    <span class="s Compound">{        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Index"><span class="e Identifier"><span class="i">arguments</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">j</span></span>++</span>]</span></span>;</span>
        <span class="lc">//printf("test1: '%.*s' %d\n", ti.classinfo.name, ti.classinfo.name.length);</span>
        <span class="lc">//ti.print();</span>

        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">flags</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">precision</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">field_width</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>

        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">skipCI</span></span>(<span class="i">ti</span>)</span></span>;</span>
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">mi</span> = <span class="e Int"><span class="n">9</span></span>;</span></span>
        <span class="s DoWhile"><span class="k">do</span>
        <span class="s Compound">{
            <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Dot"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">ti</span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>.<span class="e Identifier"><span class="i">length</span></span></span> &lt;= <span class="e Identifier"><span class="i">mi</span></span></span>)
                <span class="s Goto"><span class="k">goto</span> <span class="i">Lerror</span>;</span></span>
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">m</span></span> = <span class="e Index"><span class="e Dot"><span class="e Dot"><span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">Mangle</span></span>)<span class="e Identifier"><span class="i">ti</span></span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">mi</span></span>++</span>]</span></span>;</span>
        }</span> <span class="k">while</span> (<span class="e OrOr"><span class="e Equal"><span class="e Identifier"><span class="i">m</span></span> == <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tconst</span></span></span></span> || <span class="e Equal"><span class="e Identifier"><span class="i">m</span></span> == <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tinvariant</span></span></span></span></span>)</span><span class="s Empty">;</span>

        <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">m</span></span> == <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tarray</span></span></span></span>)
        <span class="s Compound">{
            <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">ti</span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>.<span class="e Identifier"><span class="i">length</span></span></span> == <span class="e Int"><span class="n">14</span></span></span> &amp;&amp;
                <span class="e Equal"><span class="e Slice"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">ti</span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>[<span class="e Int"><span class="n">9</span></span>..<span class="e Int"><span class="n">14</span></span>]</span> == <span class="e String"><span class="sl">"Array"</span></span></span></span>) 
            <span class="s Compound">{
              <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">TypeInfo</span></span> <span class="i">tn</span> = <span class="e Dot"><span class="e Paren">(<span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">TypeInfo_Array</span></span>)<span class="e Identifier"><span class="i">ti</span></span></span>)</span>.<span class="e Identifier"><span class="i">next</span></span></span>;</span></span>
              <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">tn</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">skipCI</span></span>(<span class="i">tn</span>)</span></span>;</span>
              <span class="s Switch"><span class="k">switch</span> (<span class="e Index"><span class="e Dot"><span class="e Dot"><span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">Mangle</span></span>)<span class="e Identifier"><span class="i">tn</span></span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>[<span class="e Int"><span class="n">9</span></span>]</span>)
              <span class="s Compound">{
                <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tchar</span></span></span>:</span></span></span>
                <span class="s Scope"><span class="s Compound"><span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Twchar</span></span></span>:</span></span></span>
                <span class="s Scope"><span class="s Compound"><span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tdchar</span></span></span>:
                    <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Identifier"><span class="i">tn</span></span></span>;</span>
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">mi</span></span> = <span class="e Int"><span class="n">9</span></span></span>;</span>
                    <span class="s Break"><span class="k">break</span>;</span></span></span></span>
                <span class="s Default"><span class="k">default</span>:
                    <span class="s Scope"><span class="s Compound"><span class="s Break"><span class="k">break</span>;</span></span></span></span>
              }</span></span>
            }</span></span>
        <span class="s Labeled"><span class="i">L1</span>:
            <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">Mangle</span></span> <span class="i">m2</span> = <span class="e Index"><span class="e Dot"><span class="e Dot"><span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">Mangle</span></span>)<span class="e Identifier"><span class="i">ti</span></span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>[<span class="e Identifier"><span class="i">mi</span></span>]</span>;</span></span></span>
            <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">string</span></span>  <span class="i">fmt</span>;</span></span>                        <span class="lc">// format string</span>
            <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">wstring</span></span> <span class="i">wfmt</span>;</span></span>
            <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">dstring</span></span> <span class="i">dfmt</span>;</span></span>

            <span class="bc">/* For performance reasons, this code takes advantage of the
             * fact that most format strings will be ASCII, and that the
             * format specifiers are always ASCII. This means we only need
             * to deal with UTF in a couple of isolated spots.
             */</span>

            <span class="s Switch"><span class="k">switch</span> (<span class="e Identifier"><span class="i">m2</span></span>)
            <span class="s Compound">{
                <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tchar</span></span></span>:
                    <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">fmt</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Identifier"><span class="i">string</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                    <span class="s Break"><span class="k">break</span>;</span></span></span></span>

                <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Twchar</span></span></span>:
                    <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">wfmt</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Identifier"><span class="i">wstring</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">fmt</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">toUTF8</span></span>(<span class="i">wfmt</span>)</span></span>;</span>
                    <span class="s Break"><span class="k">break</span>;</span></span></span></span>

                <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tdchar</span></span></span>:
                    <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">dfmt</span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Identifier"><span class="i">dstring</span></span></span>)</span>(<span class="i">argptr</span>)</span></span>;</span>
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">fmt</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">toUTF8</span></span>(<span class="i">dfmt</span>)</span></span>;</span>
                    <span class="s Break"><span class="k">break</span>;</span></span></span></span>

                <span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tconst</span></span></span>:</span></span></span>
                <span class="s Scope"><span class="s Compound"><span class="s Case"><span class="k">case</span> <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tinvariant</span></span></span>:
                    <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e PostIncr"><span class="e Identifier"><span class="i">mi</span></span>++</span>;</span>
                    <span class="s Goto"><span class="k">goto</span> <span class="i">L1</span>;</span></span></span></span>

                <span class="s Default"><span class="k">default</span>:
                    <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatArg</span></span>(<span class="cl">'s'</span>)</span>;</span>
                    <span class="s Continue"><span class="k">continue</span>;</span></span></span></span>
            }</span></span>

            <span class="s For"><span class="k">for</span> (<span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">size_t</span></span> <span class="i">i</span> = <span class="e Int"><span class="n">0</span></span>;</span></span> <span class="e Rel"><span class="e Identifier"><span class="i">i</span></span> &lt; <span class="e Dot"><span class="e Identifier"><span class="i">fmt</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>; )
            <span class="s Compound">{        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">dchar</span></span> <span class="i">c</span> = <span class="e Index"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">i</span></span>++</span>]</span>;</span></span>

                <span class="s Declaration"><span class="d Function"><span class="t Integral"><span class="k">dchar</span></span> <span class="i">getFmtChar</span><span class="o Parameters">()</span>
                <span class="s FuncBody"><span class="s Compound">{   <span class="lc">// Valid format specifier characters will never be UTF</span>
                    <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">i</span></span> == <span class="e Dot"><span class="e Identifier"><span class="i">fmt</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>)
                        <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>(<span class="e String"><span class="sl">"invalid specifier"</span></span>)</span>;</span></span>
                    <span class="s Return"><span class="k">return</span> <span class="e Index"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">i</span></span>++</span>]</span>;</span>
                }</span></span></span></span>

                <span class="s Declaration"><span class="d Function"><span class="t Integral"><span class="k">int</span></span> <span class="i">getFmtInt</span><span class="o Parameters">()</span>
                <span class="s FuncBody"><span class="s Compound">{   <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">n</span>;</span></span>

                    <span class="s While"><span class="k">while</span> (<span class="e Int"><span class="n">1</span></span>)
                    <span class="s Compound">{
                        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">n</span></span> = <span class="e Plus"><span class="e Mul"><span class="e Identifier"><span class="i">n</span></span> * <span class="e Int"><span class="n">10</span></span></span> + <span class="e Paren">(<span class="e Minus"><span class="e Identifier"><span class="i">c</span></span> - <span class="e Char"><span class="cl">'0'</span></span></span>)</span></span></span>;</span>
                        <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">n</span></span> &lt; <span class="e Int"><span class="n">0</span></span></span>)        <span class="lc">// overflow</span>
                            <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>(<span class="e String"><span class="sl">"int overflow"</span></span>)</span>;</span></span>
                        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">c</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">getFmtChar</span></span>()</span></span>;</span>
                        <span class="s If"><span class="k">if</span> (<span class="e OrOr"><span class="e Rel"><span class="e Identifier"><span class="i">c</span></span> &lt; <span class="e Char"><span class="cl">'0'</span></span></span> || <span class="e Rel"><span class="e Identifier"><span class="i">c</span></span> &gt; <span class="e Char"><span class="cl">'9'</span></span></span></span>)
                            <span class="s Break"><span class="k">break</span>;</span></span>
                    }</span></span>
                    <span class="s Return"><span class="k">return</span> <span class="e Identifier"><span class="i">n</span></span>;</span>
                }</span></span></span></span>

                <span class="s Declaration"><span class="d Function"><span class="t Integral"><span class="k">int</span></span> <span class="i">getFmtStar</span><span class="o Parameters">()</span>
                <span class="s FuncBody"><span class="s Compound">{   <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">Mangle</span></span> <span class="i">m</span>;</span></span>
                    <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">TypeInfo</span></span> <span class="i">ti</span>;</span></span>

                    <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">j</span></span> == <span class="e Dot"><span class="e Identifier"><span class="i">arguments</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>)
                        <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>(<span class="e String"><span class="sl">"too few arguments"</span></span>)</span>;</span></span>
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Index"><span class="e Identifier"><span class="i">arguments</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">j</span></span>++</span>]</span></span>;</span>
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">m</span></span> = <span class="e Index"><span class="e Dot"><span class="e Dot"><span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">Mangle</span></span>)<span class="e Identifier"><span class="i">ti</span></span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>[<span class="e Int"><span class="n">9</span></span>]</span></span>;</span>
                    <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">m</span></span> != <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tint</span></span></span></span>)
                        <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>(<span class="e String"><span class="sl">"int argument expected"</span></span>)</span>;</span></span>
                    <span class="s Return"><span class="k">return</span> <span class="e Call"><span class="e TemplateInstance"><span class="i">va_arg</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">int</span></span></span>)</span>(<span class="i">argptr</span>)</span>;</span>
                }</span></span></span></span>

                <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">c</span></span> != <span class="e Char"><span class="cl">'%'</span></span></span>)
                <span class="s Compound">{
                    <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">c</span></span> &gt; <span class="e Int"><span class="n">0x7F</span></span></span>)        <span class="lc">// if UTF sequence</span>
                    <span class="s Compound">{
                        <span class="s Expression"><span class="e PostDecr"><span class="e Identifier"><span class="i">i</span></span>--</span>;</span>                <span class="lc">// back up and decode UTF sequence</span>
                        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">c</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">utf</span></span></span>.<span class="e Identifier"><span class="i">decode</span></span></span>(<span class="i">fmt</span>, <span class="i">i</span>)</span></span>;</span>
                    }</span></span>
                <span class="s Labeled"><span class="i">Lputc</span>:
                    <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">putc</span></span>(<span class="i">c</span>)</span>;</span></span>
                    <span class="s Continue"><span class="k">continue</span>;</span>
                }</span></span>

                <span class="lc">// Get flags {-+ #}</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">flags</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
                <span class="s While"><span class="k">while</span> (<span class="e Int"><span class="n">1</span></span>)
                <span class="s Compound">{
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">c</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">getFmtChar</span></span>()</span></span>;</span>
                    <span class="s Switch"><span class="k">switch</span> (<span class="e Identifier"><span class="i">c</span></span>)
                    <span class="s Compound">{
                        <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'-'</span></span>:        <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e OrAssign"><span class="e Identifier"><span class="i">flags</span></span> |= <span class="e Identifier"><span class="i">FLdash</span></span></span>;</span>        <span class="s Continue"><span class="k">continue</span>;</span></span></span></span>
                        <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'+'</span></span>:        <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e OrAssign"><span class="e Identifier"><span class="i">flags</span></span> |= <span class="e Identifier"><span class="i">FLplus</span></span></span>;</span>        <span class="s Continue"><span class="k">continue</span>;</span></span></span></span>
                        <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">' '</span></span>:        <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e OrAssign"><span class="e Identifier"><span class="i">flags</span></span> |= <span class="e Identifier"><span class="i">FLspace</span></span></span>;</span>        <span class="s Continue"><span class="k">continue</span>;</span></span></span></span>
                        <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'#'</span></span>:        <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e OrAssign"><span class="e Identifier"><span class="i">flags</span></span> |= <span class="e Identifier"><span class="i">FLhash</span></span></span>;</span>        <span class="s Continue"><span class="k">continue</span>;</span></span></span></span>
                        <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'0'</span></span>:        <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e OrAssign"><span class="e Identifier"><span class="i">flags</span></span> |= <span class="e Identifier"><span class="i">FL0pad</span></span></span>;</span>        <span class="s Continue"><span class="k">continue</span>;</span></span></span></span>

                        <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'%'</span></span>:        <span class="s Scope"><span class="s Compound"><span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">flags</span></span> == <span class="e Int"><span class="n">0</span></span></span>)
                                            <span class="s Goto"><span class="k">goto</span> <span class="i">Lputc</span>;</span></span></span></span></span>
                        <span class="s Default"><span class="k">default</span>:        <span class="s Scope"><span class="s Compound"><span class="s Break"><span class="k">break</span>;</span></span></span></span>
                    }</span></span>
                    <span class="s Break"><span class="k">break</span>;</span>
                }</span></span>

                <span class="lc">// Get field width</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">field_width</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
                <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">c</span></span> == <span class="e Char"><span class="cl">'*'</span></span></span>)
                <span class="s Compound">{
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">field_width</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">getFmtStar</span></span>()</span></span>;</span>
                    <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">field_width</span></span> &lt; <span class="e Int"><span class="n">0</span></span></span>)
                    <span class="s Compound">{   <span class="s Expression"><span class="e OrAssign"><span class="e Identifier"><span class="i">flags</span></span> |= <span class="e Identifier"><span class="i">FLdash</span></span></span>;</span>
                        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">field_width</span></span> = <span class="e Sign">-<span class="e Identifier"><span class="i">field_width</span></span></span></span>;</span>
                    }</span></span>

                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">c</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">getFmtChar</span></span>()</span></span>;</span>
                }</span>
                <span class="k">else</span> <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e Rel"><span class="e Identifier"><span class="i">c</span></span> &gt;= <span class="e Char"><span class="cl">'0'</span></span></span> &amp;&amp; <span class="e Rel"><span class="e Identifier"><span class="i">c</span></span> &lt;= <span class="e Char"><span class="cl">'9'</span></span></span></span>)
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">field_width</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">getFmtInt</span></span>()</span></span>;</span></span></span>

                <span class="s If"><span class="k">if</span> (<span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLplus</span></span></span>)
                    <span class="s Expression"><span class="e AndAssign"><span class="e Identifier"><span class="i">flags</span></span> &amp;= <span class="e Comp">~<span class="e Identifier"><span class="i">FLspace</span></span></span></span>;</span></span>
                <span class="s If"><span class="k">if</span> (<span class="e And"><span class="e Identifier"><span class="i">flags</span></span> &amp; <span class="e Identifier"><span class="i">FLdash</span></span></span>)
                    <span class="s Expression"><span class="e AndAssign"><span class="e Identifier"><span class="i">flags</span></span> &amp;= <span class="e Comp">~<span class="e Identifier"><span class="i">FL0pad</span></span></span></span>;</span></span>

                <span class="lc">// Get precision</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">precision</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
                <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">c</span></span> == <span class="e Char"><span class="cl">'.'</span></span></span>)
                <span class="s Compound">{   <span class="s Expression"><span class="e OrAssign"><span class="e Identifier"><span class="i">flags</span></span> |= <span class="e Identifier"><span class="i">FLprecision</span></span></span>;</span>
                    <span class="lc">//flags &amp;= ~FL0pad;</span>

                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">c</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">getFmtChar</span></span>()</span></span>;</span>
                    <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">c</span></span> == <span class="e Char"><span class="cl">'*'</span></span></span>)
                    <span class="s Compound">{
                        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">precision</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">getFmtStar</span></span>()</span></span>;</span>
                        <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">precision</span></span> &lt; <span class="e Int"><span class="n">0</span></span></span>)
                        <span class="s Compound">{   <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">precision</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
                            <span class="s Expression"><span class="e AndAssign"><span class="e Identifier"><span class="i">flags</span></span> &amp;= <span class="e Comp">~<span class="e Identifier"><span class="i">FLprecision</span></span></span></span>;</span>
                        }</span></span>

                        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">c</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">getFmtChar</span></span>()</span></span>;</span>
                    }</span>
                    <span class="k">else</span> <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e Rel"><span class="e Identifier"><span class="i">c</span></span> &gt;= <span class="e Char"><span class="cl">'0'</span></span></span> &amp;&amp; <span class="e Rel"><span class="e Identifier"><span class="i">c</span></span> &lt;= <span class="e Char"><span class="cl">'9'</span></span></span></span>)
                        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">precision</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">getFmtInt</span></span>()</span></span>;</span></span></span>
                }</span></span>

                <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">j</span></span> == <span class="e Dot"><span class="e Identifier"><span class="i">arguments</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>)
                    <span class="s Goto"><span class="k">goto</span> <span class="i">Lerror</span>;</span></span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Index"><span class="e Identifier"><span class="i">arguments</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">j</span></span>++</span>]</span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">ti</span></span> = <span class="e Call"><span class="e Identifier"><span class="i">skipCI</span></span>(<span class="i">ti</span>)</span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">mi</span></span> = <span class="e Int"><span class="n">9</span></span></span>;</span>
                <span class="s DoWhile"><span class="k">do</span>
                <span class="s Compound">{
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">m</span></span> = <span class="e Index"><span class="e Dot"><span class="e Dot"><span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">Mangle</span></span>)<span class="e Identifier"><span class="i">ti</span></span></span>.<span class="e Identifier"><span class="i">classinfo</span></span></span>.<span class="e Identifier"><span class="i">name</span></span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">mi</span></span>++</span>]</span></span>;</span>
                }</span> <span class="k">while</span> (<span class="e OrOr"><span class="e Equal"><span class="e Identifier"><span class="i">m</span></span> == <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tconst</span></span></span></span> || <span class="e Equal"><span class="e Identifier"><span class="i">m</span></span> == <span class="e Dot"><span class="e Identifier"><span class="i">Mangle</span></span>.<span class="e Identifier"><span class="i">Tinvariant</span></span></span></span></span>)</span><span class="s Empty">;</span>

                <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">c</span></span> &gt; <span class="e Int"><span class="n">0x7F</span></span></span>)                <span class="lc">// if UTF sequence</span>
                    <span class="s Goto"><span class="k">goto</span> <span class="i">Lerror</span>;</span></span>        <span class="lc">// format specifiers can't be UTF</span>
                <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatArg</span></span>(<span class="k">cast</span>(<span class="k">char</span>)<span class="i">c</span>)</span>;</span>
            }</span></span>
        }</span>
        <span class="k">else</span>
        <span class="s Compound">{
            <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatArg</span></span>(<span class="cl">'s'</span>)</span>;</span>
        }</span></span>
    }</span></span>
    <span class="s Return"><span class="k">return</span>;</span>

<span class="s Labeled"><span class="i">Lerror</span>:
    <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>()</span>;</span></span>
}</span></span></span>

<span class="bc">/* ======================== Unit Tests ====================================== */</span>

<span class="d Unittest"><span class="k">unittest</span>
<span class="s FuncBody"><span class="s Compound">{
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">i</span>;</span></span>
    <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">string</span></span> <span class="i">s</span>;</span></span>

    <span class="s Debug"><span class="k">debug</span>(<span class="i">format</span>) <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">printf</span></span>(<span class="sl">"std.format.format.unittest\n"</span>)</span>;</span></span>
 
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"hello world! %s %s "</span>, <span class="k">true</span>, <span class="n">57</span>, <span class="n">1_000_000_000</span>, <span class="cl">'x'</span>, <span class="sl">" foo"</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"hello world! true 57 1000000000x foo"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="n">1.67</span>, <span class="sl">" %A "</span>, -<span class="n">1.28</span>, <span class="k">float</span>.<span class="i">nan</span>)</span></span>;</span>
    <span class="bc">/* The host C library is used to format floats.
     * C99 doesn't specify what the hex digit before the decimal point
     * is for %A.
     */</span>
    <span class="s Version"><span class="k">version</span> (<span class="i">linux</span>)
        <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"1.67 -0XA.3D70A3D70A3D8P-3 nan"</span></span></span>)</span>;</span>
    <span class="k">else</span>
        <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"1.67 -0X1.47AE147AE147BP+0 nan"</span></span></span>)</span>;</span></span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%x %X"</span>, <span class="n">0x1234AF</span>, <span class="n">0xAFAFAFAF</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"1234af AFAFAFAF"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%b %o"</span>, <span class="n">0x1234AF</span>, <span class="n">0xAFAFAFAF</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"100100011010010101111 25753727657"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%d %s"</span>, <span class="n">0x1234AF</span>, <span class="n">0xAFAFAFAF</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"1193135 2947526575"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%s"</span>, <span class="n">1.2</span> + <span class="n">3.4i</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"1.2+3.4i"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%x %X"</span>, <span class="n">1.32</span>, <span class="n">6.78f</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"3ff51eb851eb851f 40D8F5C3"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%#06.*f"</span>,<span class="n">2</span>,<span class="n">12.345</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"012.35"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%#0*.*f"</span>,<span class="n">6</span>,<span class="n">2</span>,<span class="n">12.345</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"012.35"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%7.4g:"</span>, <span class="n">12.678</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"  12.68:"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%7.4g:"</span>, <span class="n">12.678L</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"  12.68:"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%04f|%05d|%#05x|%#5x"</span>,-<span class="n">4.</span>,-<span class="n">10</span>,<span class="n">1</span>,<span class="n">1</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"-4.000000|-0010|0x001|  0x1"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e Sign">-<span class="e Int"><span class="n">10</span></span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%d|%3d|%03d|%1d|%01.4f"</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="k">cast</span>(<span class="k">double</span>) <span class="i">i</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"-10|-10|-10|-10|-10.0000"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e Sign">-<span class="e Int"><span class="n">5</span></span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%d|%3d|%03d|%1d|%01.4f"</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="k">cast</span>(<span class="k">double</span>) <span class="i">i</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"-5| -5|-05|-5|-5.0000"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%d|%3d|%03d|%1d|%01.4f"</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="k">cast</span>(<span class="k">double</span>) <span class="i">i</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"0|  0|000|0|0.0000"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e Int"><span class="n">5</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%d|%3d|%03d|%1d|%01.4f"</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="k">cast</span>(<span class="k">double</span>) <span class="i">i</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"5|  5|005|5|5.0000"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e Int"><span class="n">10</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%d|%3d|%03d|%1d|%01.4f"</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="k">cast</span>(<span class="k">double</span>) <span class="i">i</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"10| 10|010|10|10.0000"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%.0d"</span>, <span class="n">0</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">""</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%.g"</span>, <span class="n">.34</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"0.3"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%.0g"</span>, <span class="n">.34</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"0.3"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%.2g"</span>, <span class="n">.34</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"0.34"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%0.0008f"</span>, <span class="n">1e-08</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"0.00000001"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%0.0008f"</span>, <span class="n">1e-05</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">s</span></span> == <span class="e String"><span class="sl">"0.00001000"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e String"><span class="sl">"helloworld"</span></span></span>;</span>
    <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">string</span></span> <span class="i">r</span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%.2s"</span>, <span class="i">s</span>[<span class="n">0</span>..<span class="n">5</span>])</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"he"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%.20s"</span>, <span class="i">s</span>[<span class="n">0</span>..<span class="n">5</span>])</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"hello"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%8s"</span>, <span class="i">s</span>[<span class="n">0</span>..<span class="n">5</span>])</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"   hello"</span></span></span>)</span>;</span>

    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">byte</span></span><span class="t Array">[]</span> <span class="i">arrbyte</span> = <span class="e New"><span class="k">new</span> <span class="t Integral"><span class="k">byte</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrbyte</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e Int"><span class="n">100</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrbyte</span></span>[<span class="e Int"><span class="n">1</span></span>]</span> = <span class="e Sign">-<span class="e Int"><span class="n">99</span></span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrbyte</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="i">arrbyte</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"[100,-99,0,0]"</span></span></span>)</span>;</span>

    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">ubyte</span></span><span class="t Array">[]</span> <span class="i">arrubyte</span> = <span class="e New"><span class="k">new</span> <span class="t Integral"><span class="k">ubyte</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrubyte</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e Int"><span class="n">100</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrubyte</span></span>[<span class="e Int"><span class="n">1</span></span>]</span> = <span class="e Int"><span class="n">200</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrubyte</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="i">arrubyte</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"[100,200,0,0]"</span></span></span>)</span>;</span>

    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">short</span></span><span class="t Array">[]</span> <span class="i">arrshort</span> = <span class="e New"><span class="k">new</span> <span class="t Integral"><span class="k">short</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrshort</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e Int"><span class="n">100</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrshort</span></span>[<span class="e Int"><span class="n">1</span></span>]</span> = <span class="e Sign">-<span class="e Int"><span class="n">999</span></span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrshort</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="i">arrshort</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"[100,-999,0,0]"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%s"</span>,<span class="i">arrshort</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"[100,-999,0,0]"</span></span></span>)</span>;</span>

    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">ushort</span></span><span class="t Array">[]</span> <span class="i">arrushort</span> = <span class="e New"><span class="k">new</span> <span class="t Integral"><span class="k">ushort</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrushort</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e Int"><span class="n">100</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrushort</span></span>[<span class="e Int"><span class="n">1</span></span>]</span> = <span class="e Int"><span class="n">20_000</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrushort</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="i">arrushort</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"[100,20000,0,0]"</span></span></span>)</span>;</span>

    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span><span class="t Array">[]</span> <span class="i">arrint</span> = <span class="e New"><span class="k">new</span> <span class="t Integral"><span class="k">int</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrint</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e Int"><span class="n">100</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrint</span></span>[<span class="e Int"><span class="n">1</span></span>]</span> = <span class="e Sign">-<span class="e Int"><span class="n">999</span></span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrint</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="i">arrint</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"[100,-999,0,0]"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%s"</span>,<span class="i">arrint</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"[100,-999,0,0]"</span></span></span>)</span>;</span>

    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">long</span></span><span class="t Array">[]</span> <span class="i">arrlong</span> = <span class="e New"><span class="k">new</span> <span class="t Integral"><span class="k">long</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrlong</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e Int"><span class="n">100</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrlong</span></span>[<span class="e Int"><span class="n">1</span></span>]</span> = <span class="e Sign">-<span class="e Int"><span class="n">999</span></span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrlong</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="i">arrlong</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"[100,-999,0,0]"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%s"</span>,<span class="i">arrlong</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"[100,-999,0,0]"</span></span></span>)</span>;</span>

    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">ulong</span></span><span class="t Array">[]</span> <span class="i">arrulong</span> = <span class="e New"><span class="k">new</span> <span class="t Integral"><span class="k">ulong</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrulong</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e Int"><span class="n">100</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrulong</span></span>[<span class="e Int"><span class="n">1</span></span>]</span> = <span class="e Int"><span class="n">999</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrulong</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="i">arrulong</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"[100,999,0,0]"</span></span></span>)</span>;</span>

    <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">string</span></span><span class="t Array">[]</span> <span class="i">arr2</span> = <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">string</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arr2</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e String"><span class="sl">"hello"</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arr2</span></span>[<span class="e Int"><span class="n">1</span></span>]</span> = <span class="e String"><span class="sl">"world"</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arr2</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> = <span class="e String"><span class="sl">"foo"</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="i">arr2</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"[hello,world,,foo]"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%.8d"</span>, <span class="n">7</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"00000007"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%.8x"</span>, <span class="n">10</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"0000000a"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%-3d"</span>, <span class="n">7</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"7  "</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%*d"</span>, -<span class="n">3</span>, <span class="n">7</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"7  "</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%.*d"</span>, -<span class="n">3</span>, <span class="n">7</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"7"</span></span></span>)</span>;</span>

    <span class="s Declaration"><span class="d Typedef"><span class="k">typedef</span> <span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">myint</span>;</span></span></span>
    <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">myint</span></span> <span class="i">m</span> = <span class="e Sign">-<span class="e Int"><span class="n">7</span></span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="i">m</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"-7"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"abc"c</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"abc"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"def"w</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"def"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"ghi"d</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"ghi"</span></span></span>)</span>;</span>

    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">void</span></span><span class="t Pointer">*</span> <span class="i">p</span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">void</span></span><span class="t Pointer">*</span>)<span class="e Int"><span class="n">0xDEADBEEF</span></span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="i">p</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"DEADBEEF"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%#x"</span>, <span class="n">0xabcd</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"0xabcd"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%#X"</span>, <span class="n">0xABCD</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"0XABCD"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%#o"</span>, <span class="n">012345</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"012345"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%o"</span>, <span class="n">9</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"11"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%+d"</span>, <span class="n">123</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"+123"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%+d"</span>, -<span class="n">123</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"-123"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"% d"</span>, <span class="n">123</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">" 123"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"% d"</span>, -<span class="n">123</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"-123"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%%"</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"%"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%d"</span>, <span class="k">true</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"1"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%d"</span>, <span class="k">false</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"0"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%d"</span>, <span class="cl">'a'</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"97"</span></span></span>)</span>;</span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">wchar</span></span> <span class="i">wc</span> = <span class="e Char"><span class="cl">'a'</span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%d"</span>, <span class="i">wc</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"97"</span></span></span>)</span>;</span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">dchar</span></span> <span class="i">dc</span> = <span class="e Char"><span class="cl">'a'</span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%d"</span>, <span class="i">dc</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"97"</span></span></span>)</span>;</span>

    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">byte</span></span> <span class="i">b</span> = <span class="e TypeDotId"><span class="t Integral"><span class="k">byte</span></span>.<span class="i">max</span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%x"</span>, <span class="i">b</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"7f"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%x"</span>, ++<span class="i">b</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"80"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%x"</span>, ++<span class="i">b</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"81"</span></span></span>)</span>;</span>

    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">short</span></span> <span class="i">sh</span> = <span class="e TypeDotId"><span class="t Integral"><span class="k">short</span></span>.<span class="i">max</span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%x"</span>, <span class="i">sh</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"7fff"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%x"</span>, ++<span class="i">sh</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"8000"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%x"</span>, ++<span class="i">sh</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"8001"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e TypeDotId"><span class="t Integral"><span class="k">int</span></span>.<span class="i">max</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%x"</span>, <span class="i">i</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"7fffffff"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%x"</span>, ++<span class="i">i</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"80000000"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%x"</span>, ++<span class="i">i</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"80000001"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%x"</span>, <span class="n">10</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"a"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%X"</span>, <span class="n">10</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"A"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%x"</span>, <span class="n">15</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"f"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%X"</span>, <span class="n">15</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"F"</span></span></span>)</span>;</span>

    <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">Object</span></span> <span class="i">c</span> = <span class="e Null"><span class="k">null</span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="i">c</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"null"</span></span></span>)</span>;</span>

    <span class="s Declaration"><span class="d Enum"><span class="k">enum</span> <span class="i">TestEnum</span>
    {
            <span class="d EnumMember"><span class="i">Value1</span></span>, <span class="d EnumMember"><span class="i">Value2</span></span>
    }</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%s"</span>, <span class="i">TestEnum</span>.<span class="i">Value2</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"1"</span></span></span>)</span>;</span>

    <span class="d Variables"><span class="t Invariant"><span class="k">invariant</span>(<span class="t Integral"><span class="k">char</span></span><span class="t Array">[<span class="e Int"><span class="n">5</span></span>]</span>)</span><span class="t Array">[<span class="t Integral"><span class="k">int</span></span>]</span> <span class="i">aa</span> = <span class="e Paren">(<span class="e AArrayLiteral">[<span class="e Int"><span class="n">3</span></span>:<span class="e String"><span class="sl">"hello"</span></span>, <span class="e Int"><span class="n">4</span></span>:<span class="e String"><span class="sl">"betty"</span></span>]</span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%s"</span>, <span class="i">aa</span>.<span class="i">values</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"[[h,e,l,l,o],[b,e,t,t,y]]"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%s"</span>, <span class="i">aa</span>)</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"[3:[h,e,l,l,o],4:[b,e,t,t,y]]"</span></span></span>)</span>;</span>

    <span class="d StorageClass"><span class="k">static</span> <span class="d StorageClass"><span class="k">const</span> <span class="d Variables"><span class="t Integral"><span class="k">dchar</span></span><span class="t Array">[]</span> <span class="i">ds</span> = <span class="e ArrayInit">[<span class="e Char"><span class="cl">'a'</span></span>,<span class="e Char"><span class="cl">'b'</span></span>]</span>;</span></span></span>
    <span class="s For"><span class="k">for</span> (<span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">j</span> = <span class="e Int"><span class="n">0</span></span>;</span></span> <span class="e Rel"><span class="e Identifier"><span class="i">j</span></span> &lt; <span class="e Dot"><span class="e Identifier"><span class="i">ds</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>; <span class="e PreIncr">++<span class="e Identifier"><span class="i">j</span></span></span>)
    <span class="s Compound">{
        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">" %d"</span>, <span class="i">ds</span>[<span class="i">j</span>])</span></span>;</span>
        <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">j</span></span> == <span class="e Int"><span class="n">0</span></span></span>)
            <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">" 97"</span></span></span>)</span>;</span>
        <span class="k">else</span>
            <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">" 98"</span></span></span>)</span>;</span></span>
    }</span></span>

    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">r</span></span> = <span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"&gt;%14d&lt;, "</span>, <span class="n">15</span>, [<span class="n">1</span>,<span class="n">2</span>,<span class="n">3</span>])</span></span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Identifier"><span class="i">r</span></span> == <span class="e String"><span class="sl">"&gt;            15&lt;, [1,2,3]"</span></span></span>)</span>;</span>

    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%8s"</span>, <span class="sl">"bar"</span>)</span> == <span class="e String"><span class="sl">"     bar"</span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">format</span></span></span>(<span class="sl">"%8s"</span>, <span class="sl">"b\u00e9ll\u00f4"</span>)</span> == <span class="e String"><span class="sl">"   b\u00e9ll\u00f4"</span></span></span>)</span>;</span>
}</span></span></span>

<span class="lc">// Andrei</span>
<span class="lc">//-------------------------------------------------------------------------------</span>
<span class="bc">/**
 * Implements the static Writer interface for a string. Instantiate it
 * with the character type, e.g. StringWriter!(char),
 * StringWriter!(wchar), or StringWriter!(dchar). Regardless of
 * instantiation, StringWriter supports all character widths; it only
 * is the most efficient at accepting the character type it was
 * instantiated with.
 */</span>
<span class="d Template"><span class="d Compound"><span class="d Struct"><span class="k">struct</span> <span class="i">StringWriter</span><span class="o TemplateParameters">(<span class="o TemplateTypeParameter"><span class="i">Char</span></span>)</span>
<span class="d Compound">{
    <span class="d Alias"><span class="k">alias</span> <span class="d Variables"><span class="t Identifier"><span class="i">Char</span></span> <span class="i">NativeChar</span>;</span></span>
    <span class="d Variables"><span class="t Identifier"><span class="i">Char</span></span><span class="t Array">[]</span> <span class="i">backend</span>;</span>
    <span class="d Template"><span class="d Compound"><span class="d Function"><span class="t Integral"><span class="k">void</span></span> <span class="i">write</span><span class="o TemplateParameters">(<span class="o TemplateTypeParameter"><span class="i">C</span></span>)</span><span class="o Parameters">(<span class="o Parameter"><span class="k">in</span> <span class="t Identifier"><span class="i">C</span></span><span class="t Array">[]</span> <span class="i">s</span></span>)</span>
    <span class="s FuncBody"><span class="s Compound">{
        <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">C</span></span>.<span class="e Identifier"><span class="i">sizeof</span></span></span> == <span class="e Dot"><span class="e Identifier"><span class="i">NativeChar</span></span>.<span class="e Identifier"><span class="i">sizeof</span></span></span></span>)
        <span class="s Compound">{
            <span class="s Expression"><span class="e CatAssign"><span class="e Identifier"><span class="i">backend</span></span> ~= <span class="e Identifier"><span class="i">s</span></span></span>;</span>
        }</span>
        <span class="k">else</span>
        <span class="s Compound">{
            <span class="s Expression"><span class="e CatAssign"><span class="e Identifier"><span class="i">backend</span></span> ~= <span class="e Call"><span class="e TemplateInstance"><span class="i">to</span>!(<span class="o TemplateArguments"><span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">NativeChar</span></span>)</span><span class="t Array">[]</span></span>)</span>(<span class="i">s</span>)</span></span>;</span>
        }</span></span>
    }</span></span></span></span></span>
    <span class="d Template"><span class="d Compound"><span class="d Function"><span class="t Integral"><span class="k">void</span></span> <span class="i">putchar</span><span class="o TemplateParameters">(<span class="o TemplateTypeParameter"><span class="i">C</span></span>)</span><span class="o Parameters">(<span class="o Parameter"><span class="k">in</span> <span class="t Identifier"><span class="i">C</span></span> <span class="i">c</span></span>)</span>
    <span class="s FuncBody"><span class="s Compound">{
        <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">C</span></span>.<span class="e Identifier"><span class="i">sizeof</span></span></span> == <span class="e Dot"><span class="e Identifier"><span class="i">NativeChar</span></span>.<span class="e Identifier"><span class="i">sizeof</span></span></span></span>)
        <span class="s Compound">{
            <span class="s Expression"><span class="e CatAssign"><span class="e Identifier"><span class="i">backend</span></span> ~= <span class="e Identifier"><span class="i">c</span></span></span>;</span>
        }</span>
        <span class="k">else</span>
        <span class="s Compound">{
            <span class="s Expression"><span class="e CatAssign"><span class="e Identifier"><span class="i">backend</span></span> ~= <span class="e Call"><span class="e TemplateInstance"><span class="i">to</span>!(<span class="o TemplateArguments"><span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">NativeChar</span></span>)</span><span class="t Array">[]</span></span>)</span>(<span class="i">c</span>)</span></span>;</span>
        }</span></span>
    }</span></span></span></span></span>
}</span></span></span></span>

<span class="d Import"><span class="k">import</span> <span class="i">std</span>.<span class="i">bitmanip</span>;</span>

<span class="bc">/*
 * A compiled version of an individual writef format
 * specifier. FormatInfo only focuses on representation, without
 * assigning any semantics to the fields. */</span>
<span class="d Struct"><span class="k">struct</span> <span class="i">FormatInfo</span>
<span class="d Compound">{
    <span class="bc">/** minimum width, default 0. If width == width.max, then width
     was specified as '*' in the format string.
    */</span>
    <span class="d Variables"><span class="t Integral"><span class="k">short</span></span> <span class="i">width</span> = <span class="e Int"><span class="n">0</span></span>;</span> 
    <span class="bc">/** precision, default ushort.max - 1. If precision ==
     precision.max, then precision was specified as '*' in the format string.
    */</span>
    <span class="d Variables"><span class="t Integral"><span class="k">short</span></span> <span class="i">precision</span> = <span class="e Minus"><span class="e TypeDotId"><span class="t Integral"><span class="k">short</span></span>.<span class="i">max</span></span> - <span class="e Int"><span class="n">1</span></span></span>;</span> <span class="lc">// by convention max-1 == "no precision"</span>
    <span class="bc">/** The actual format specifier, 's' by default. */</span>
    <span class="d Variables"><span class="t Integral"><span class="k">char</span></span> <span class="i">spec</span> = <span class="e Char"><span class="cl">'s'</span></span>;</span>
    <span class="bc">/** Index of the argument, 1 .. ubyte.max. (0 means not used)*/</span>
    <span class="d Variables"><span class="t Integral"><span class="k">ubyte</span></span> <span class="i">index</span>;</span>
    <span class="bc">/* Flags: flDash for '-', flZero for '0', flSpace for ' ', flPlus
     *  for '+', flHash for '#'. */</span>
    <span class="d Mixin"><span class="k">mixin</span>(<span class="e TemplateInstance"><span class="i">bitfields</span>!(
              <span class="o TemplateArguments"><span class="t Integral"><span class="k">bool</span></span>, <span class="e String"><span class="sl">"flDash"</span></span>, <span class="e Int"><span class="n">1</span></span>,
              <span class="t Integral"><span class="k">bool</span></span>, <span class="e String"><span class="sl">"flZero"</span></span>, <span class="e Int"><span class="n">1</span></span>,
              <span class="t Integral"><span class="k">bool</span></span>, <span class="e String"><span class="sl">"flSpace"</span></span>, <span class="e Int"><span class="n">1</span></span>,
              <span class="t Integral"><span class="k">bool</span></span>, <span class="e String"><span class="sl">"flPlus"</span></span>, <span class="e Int"><span class="n">1</span></span>,
              <span class="t Integral"><span class="k">bool</span></span>, <span class="e String"><span class="sl">"flHash"</span></span>, <span class="e Int"><span class="n">1</span></span>,
              <span class="t Integral"><span class="k">ubyte</span></span>, <span class="e String"><span class="sl">""</span></span>, <span class="e Int"><span class="n">3</span></span></span>)</span>);</span>
}</span></span>

<span class="bc">/*
 * Given a string format specification fmt, parses a format
 * specifier. The string is assumed to start with the character
 * immediately following the '%'. The string is advanced to right
 * after the end of the format specifier. */</span>
<span class="d Template"><span class="d Compound"><span class="d Function"><span class="t Identifier"><span class="i">FormatInfo</span></span> <span class="i">parseFormatSpec</span><span class="o TemplateParameters">(<span class="o TemplateTypeParameter"><span class="i">S</span></span>)</span><span class="o Parameters">(<span class="o Parameter"><span class="k">ref</span> <span class="t Identifier"><span class="i">S</span></span> <span class="i">fmt</span></span>)</span>
<span class="s FuncBody"><span class="s Compound">{
    <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">FormatInfo</span></span> <span class="i">result</span>;</span></span>
    <span class="s If"><span class="k">if</span> (<span class="e Dot"><span class="e Not">!<span class="e Identifier"><span class="i">fmt</span></span></span>.<span class="e Identifier"><span class="i">length</span></span></span>) <span class="s Return"><span class="k">return</span> <span class="e Identifier"><span class="i">result</span></span>;</span></span>
    <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">size_t</span></span> <span class="i">i</span> = <span class="e Int"><span class="n">0</span></span>;</span></span>
    <span class="s For"><span class="k">for</span> (;;)
        <span class="s Switch"><span class="k">switch</span> (<span class="e Index"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e Identifier"><span class="i">i</span></span>]</span>)
        <span class="s Compound">{
        <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'-'</span></span>: <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">flDash</span></span></span> = <span class="e Bool"><span class="k">true</span></span></span>;</span> <span class="s Expression"><span class="e PreIncr">++<span class="e Identifier"><span class="i">i</span></span></span>;</span> <span class="s Break"><span class="k">break</span>;</span></span></span></span>
        <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'+'</span></span>: <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">flPlus</span></span></span> = <span class="e Bool"><span class="k">true</span></span></span>;</span> <span class="s Expression"><span class="e PreIncr">++<span class="e Identifier"><span class="i">i</span></span></span>;</span> <span class="s Break"><span class="k">break</span>;</span></span></span></span>
        <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'#'</span></span>: <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">flHash</span></span></span> = <span class="e Bool"><span class="k">true</span></span></span>;</span> <span class="s Expression"><span class="e PreIncr">++<span class="e Identifier"><span class="i">i</span></span></span>;</span> <span class="s Break"><span class="k">break</span>;</span></span></span></span>
        <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'0'</span></span>: <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">flZero</span></span></span> = <span class="e Bool"><span class="k">true</span></span></span>;</span> <span class="s Expression"><span class="e PreIncr">++<span class="e Identifier"><span class="i">i</span></span></span>;</span> <span class="s Break"><span class="k">break</span>;</span></span></span></span>
        <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">' '</span></span>: <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">flSpace</span></span></span> = <span class="e Bool"><span class="k">true</span></span></span>;</span> <span class="s Expression"><span class="e PreIncr">++<span class="e Identifier"><span class="i">i</span></span></span>;</span> <span class="s Break"><span class="k">break</span>;</span></span></span></span>
        <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'*'</span></span>:
            <span class="s Scope"><span class="s Compound"><span class="s If"><span class="k">if</span> (<span class="e Call"><span class="e Identifier"><span class="i">isdigit</span></span>(<span class="i">fmt</span>[++<span class="i">i</span>])</span>)
            <span class="s Compound">{
                <span class="lc">// a '*' followed by digits and '$' is a positional format</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">fmt</span></span> = <span class="e Slice"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e Int"><span class="n">1</span></span> .. <span class="e Dollar">$</span>]</span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">width</span></span></span> = <span class="e Call"><span class="e Sign">-<span class="e TemplateInstance"><span class="i">parse</span>!(<span class="o TemplateArguments"><span class="t Typeof"><span class="k">typeof</span>(<span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">width</span></span></span>)</span></span>)</span></span>(<span class="i">fmt</span>)</span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
                <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Index"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">i</span></span>++</span>]</span> != <span class="e Char"><span class="cl">'$'</span></span></span>) <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>(<span class="e String"><span class="sl">"$ expected"</span></span>)</span>;</span></span>
            }</span>
            <span class="k">else</span> 
            <span class="s Compound">{
                <span class="lc">// read result</span>
                <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">width</span></span></span> = <span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">width</span></span></span>.<span class="e Identifier"><span class="i">max</span></span></span></span>;</span>
            }</span></span>
            <span class="s Break"><span class="k">break</span>;</span></span></span></span>
        <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'1'</span></span>:</span></span></span> <span class="s Scope"><span class="s Compound"><span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'2'</span></span>:</span></span></span> <span class="s Scope"><span class="s Compound"><span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'3'</span></span>:</span></span></span> <span class="s Scope"><span class="s Compound"><span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'4'</span></span>:</span></span></span>
        <span class="s Scope"><span class="s Compound"><span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'5'</span></span>:</span></span></span> <span class="s Scope"><span class="s Compound"><span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'6'</span></span>:</span></span></span> <span class="s Scope"><span class="s Compound"><span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'7'</span></span>:</span></span></span> <span class="s Scope"><span class="s Compound"><span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'8'</span></span>:</span></span></span> <span class="s Scope"><span class="s Compound"><span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'9'</span></span>:
            <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">fmt</span></span> = <span class="e Slice"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e Identifier"><span class="i">i</span></span> .. <span class="e Dollar">$</span>]</span></span>;</span>
            <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">widthOrArgIndex</span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">parse</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">int</span></span></span>)</span>(<span class="i">fmt</span>)</span>;</span></span>
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
            <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Index"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> == <span class="e Char"><span class="cl">'$'</span></span></span>)
            <span class="s Compound">{
                <span class="lc">// index!</span>
                <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">index</span></span></span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">to</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">ubyte</span></span></span>)</span>(<span class="i">widthOrArgIndex</span>)</span></span>;</span>
                <span class="s Expression"><span class="e PreIncr">++<span class="e Identifier"><span class="i">i</span></span></span>;</span>
            }</span>
            <span class="k">else</span>
            <span class="s Compound">{
                <span class="lc">// width</span>
                <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">width</span></span></span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">short</span></span>)<span class="e Identifier"><span class="i">widthOrArgIndex</span></span></span></span>;</span>
            }</span></span>
            <span class="s Break"><span class="k">break</span>;</span></span></span></span>
        <span class="s Case"><span class="k">case</span> <span class="e Char"><span class="cl">'.'</span></span>:
            <span class="s Scope"><span class="s Compound"><span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Index"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e PreIncr">++<span class="e Identifier"><span class="i">i</span></span></span>]</span> == <span class="e Char"><span class="cl">'*'</span></span></span>)
            <span class="s Compound">{
                <span class="s If"><span class="k">if</span> (<span class="e Call"><span class="e Identifier"><span class="i">isdigit</span></span>(<span class="i">fmt</span>[++<span class="i">i</span>])</span>)
                <span class="s Compound">{
                    <span class="lc">// a '.*' followed by digits and '$' is a positional format</span>
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">fmt</span></span> = <span class="e Slice"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e Identifier"><span class="i">i</span></span> .. <span class="e Dollar">$</span>]</span></span>;</span>
                    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
                    <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">short</span></span>)<span class="e Paren">(<span class="e Call"><span class="e Sign">-<span class="e TemplateInstance"><span class="i">parse</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">int</span></span></span>)</span></span>(<span class="i">fmt</span>)</span>)</span></span></span>;</span>
                    <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Index"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">i</span></span>++</span>]</span> != <span class="e Char"><span class="cl">'$'</span></span></span>) <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>(<span class="e String"><span class="sl">"$ expected"</span></span>)</span>;</span></span>
                }</span>
                <span class="k">else</span>
                <span class="s Compound">{
                    <span class="lc">// read result</span>
                    <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> = <span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span>.<span class="e Identifier"><span class="i">max</span></span></span></span>;</span>
                }</span></span>
            }</span>
            <span class="k">else</span> <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Index"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e Identifier"><span class="i">i</span></span>]</span> == <span class="e Char"><span class="cl">'-'</span></span></span>)
            <span class="s Compound">{
                <span class="lc">// negative precision, as good as 0</span>
                <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">fmt</span></span> = <span class="e Slice"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e Identifier"><span class="i">i</span></span> .. <span class="e Dollar">$</span>]</span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
                <span class="s Expression"><span class="e Call"><span class="e TemplateInstance"><span class="i">parse</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">int</span></span></span>)</span>(<span class="i">fmt</span>)</span>;</span> <span class="lc">// skip digits</span>
            }</span>
            <span class="k">else</span>
            <span class="s Compound">{
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">fmt</span></span> = <span class="e Slice"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e Identifier"><span class="i">i</span></span> .. <span class="e Dollar">$</span>]</span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> =
                    <span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">short</span></span>)<span class="e Paren">(<span class="e Cond"><span class="e Call"><span class="e Identifier"><span class="i">isdigit</span></span>(<span class="i">fmt</span>[<span class="n">0</span>])</span> ? <span class="e Call"><span class="e TemplateInstance"><span class="i">parse</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">int</span></span></span>)</span>(<span class="i">fmt</span>)</span> : <span class="e Int"><span class="n">0</span></span></span>)</span></span></span>;</span>
            }</span></span></span>
            <span class="s Break"><span class="k">break</span>;</span></span></span></span>
        <span class="s Default"><span class="k">default</span>:
            <span class="lc">// this is the format char</span>
            <span class="s Scope"><span class="s Compound"><span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">result</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> = <span class="e Index"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e Identifier"><span class="i">i</span></span>]</span></span>;</span>
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">fmt</span></span> = <span class="e Slice"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e Plus"><span class="e Identifier"><span class="i">i</span></span> + <span class="e Int"><span class="n">1</span></span></span> .. <span class="e Dollar">$</span>]</span></span>;</span>
            <span class="s Return"><span class="k">return</span> <span class="e Identifier"><span class="i">result</span></span>;</span></span></span></span>
        }</span></span></span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Bool"><span class="k">false</span></span>)</span>;</span>
}</span></span></span></span></span>

<span class="lc">//-------------------------------------------------------------------------------</span>
<span class="lc">// Writes characters in the format strings up to the first format specifier</span>
<span class="lc">// and updates the format specifier to remove the written portion</span>
<span class="lc">// The updated format fmt does not include the '%'</span>
<span class="d Protection"><span class="k">private</span> <span class="d Template"><span class="d Compound"><span class="d Function"><span class="t Integral"><span class="k">void</span></span> <span class="i">writeUpToFormatSpec</span><span class="o TemplateParameters">(<span class="o TemplateTypeParameter"><span class="i">Writer</span></span>, <span class="o TemplateTypeParameter"><span class="i">S</span></span>)</span><span class="o Parameters">(<span class="o Parameter"><span class="k">ref</span> <span class="t Identifier"><span class="i">Writer</span></span> <span class="i">w</span></span>, <span class="o Parameter"><span class="k">ref</span> <span class="t Identifier"><span class="i">S</span></span> <span class="i">fmt</span></span>)</span>
<span class="s FuncBody"><span class="s Compound">{
    <span class="s For"><span class="k">for</span> (<span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">size_t</span></span> <span class="i">i</span> = <span class="e Int"><span class="n">0</span></span>;</span></span> <span class="e Rel"><span class="e Identifier"><span class="i">i</span></span> &lt; <span class="e Dot"><span class="e Identifier"><span class="i">fmt</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>; <span class="e PreIncr">++<span class="e Identifier"><span class="i">i</span></span></span>)
    <span class="s Compound">{
        <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Index"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e Identifier"><span class="i">i</span></span>]</span> != <span class="e Char"><span class="cl">'%'</span></span></span>) <span class="s Continue"><span class="k">continue</span>;</span></span>
        <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Index"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e PreIncr">++<span class="e Identifier"><span class="i">i</span></span></span>]</span> != <span class="e Char"><span class="cl">'%'</span></span></span>)
        <span class="s Compound">{
            <span class="lc">// spec found, print and bailout</span>
            <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">write</span></span></span>(<span class="i">fmt</span>[<span class="n">0</span> .. <span class="i">i</span> - <span class="n">1</span>])</span>;</span>
            <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">fmt</span></span> = <span class="e Slice"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e Identifier"><span class="i">i</span></span> .. <span class="e Dollar">$</span>]</span></span>;</span>
            <span class="s Return"><span class="k">return</span>;</span>
        }</span></span>
        <span class="lc">// doubled! Now print whatever we had, then update the string and move on</span>
        <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">write</span></span></span>(<span class="i">fmt</span>[<span class="n">0</span> .. <span class="i">i</span>])</span>;</span>
        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">fmt</span></span> = <span class="e Slice"><span class="e Identifier"><span class="i">fmt</span></span>[<span class="e Plus"><span class="e Identifier"><span class="i">i</span></span> + <span class="e Int"><span class="n">1</span></span></span> .. <span class="e Dollar">$</span>]</span></span>;</span>
        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
    }</span></span>
    <span class="lc">// no format spec found</span>
    <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">write</span></span></span>(<span class="i">fmt</span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">fmt</span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>
}</span></span></span></span></span></span>

<span class="d Unittest"><span class="k">unittest</span>
<span class="s FuncBody"><span class="s Compound">{
    <span class="s Declaration"><span class="d Variables"><span class="t TemplateInstance"><span class="i">StringWriter</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">char</span></span></span>)</span> <span class="i">w</span>;</span></span>
    <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">string</span></span> <span class="i">fmt</span> = <span class="e String"><span class="sl">"abc%sdef%sghi"</span></span>;</span></span>
    <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">writeUpToFormatSpec</span></span>(<span class="i">w</span>, <span class="i">fmt</span>)</span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"abc"</span></span></span> &amp;&amp; <span class="e Equal"><span class="e Identifier"><span class="i">fmt</span></span> == <span class="e String"><span class="sl">"sdef%sghi"</span></span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">writeUpToFormatSpec</span></span>(<span class="i">w</span>, <span class="i">fmt</span>)</span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"abcsdef"</span></span></span> &amp;&amp; <span class="e Equal"><span class="e Identifier"><span class="i">fmt</span></span> == <span class="e String"><span class="sl">"sghi"</span></span></span></span>)</span>;</span>
    <span class="lc">// test with embedded %%s</span>
    <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">fmt</span></span> = <span class="e String"><span class="sl">"ab%%cd%%ef%sg%%h%sij"</span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>
    <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">writeUpToFormatSpec</span></span>(<span class="i">w</span>, <span class="i">fmt</span>)</span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"ab%cd%ef"</span></span></span> &amp;&amp; <span class="e Equal"><span class="e Identifier"><span class="i">fmt</span></span> == <span class="e String"><span class="sl">"sg%%h%sij"</span></span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">writeUpToFormatSpec</span></span>(<span class="i">w</span>, <span class="i">fmt</span>)</span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"ab%cd%efsg%h"</span></span></span> &amp;&amp; <span class="e Equal"><span class="e Identifier"><span class="i">fmt</span></span> == <span class="e String"><span class="sl">"sij"</span></span></span></span>)</span>;</span>
}</span></span></span>

<span class="bc">/*
 * Formats an integral number 'arg' according to 'f' and writes it to
 * 'w'.
 */</span> 
<span class="d Protection"><span class="k">private</span> <span class="d Template"><span class="d Compound"><span class="d Function"><span class="t Integral"><span class="k">void</span></span> <span class="i">formatIntegral</span><span class="o TemplateParameters">(<span class="o TemplateTypeParameter"><span class="i">Writer</span></span>, <span class="o TemplateTypeParameter"><span class="i">D</span></span>)</span><span class="o Parameters">(<span class="o Parameter"><span class="k">ref</span> <span class="t Identifier"><span class="i">Writer</span></span> <span class="i">w</span></span>, <span class="o Parameter"><span class="t Identifier"><span class="i">D</span></span> <span class="i">argx</span></span>, <span class="o Parameter"><span class="t Identifier"><span class="i">FormatInfo</span></span> <span class="i">f</span></span>)</span>
<span class="s FuncBody"><span class="s Compound">{
    <span class="s Declaration"><span class="d Variables"><span class="t TemplateInstance"><span class="i">Mutable</span>!(<span class="o TemplateArguments"><span class="t Identifier"><span class="i">D</span></span></span>)</span> <span class="i">arg</span> = <span class="e Identifier"><span class="i">argx</span></span>;</span></span>
    <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> == <span class="e Char"><span class="cl">'r'</span></span></span>)
    <span class="s Compound">{
        <span class="lc">// raw write, skip all else and write the thing</span>
        <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">begin</span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Const"><span class="k">const</span> <span class="t Integral"><span class="k">char</span></span><span class="t Pointer">*</span></span>) <span class="e Address">&amp;<span class="e Identifier"><span class="i">arg</span></span></span></span>;</span></span>
        <span class="s If"><span class="k">if</span> (<span class="e OrOr"><span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">system</span></span></span>.<span class="e Identifier"><span class="i">endian</span></span></span> == <span class="e Dot"><span class="e Identifier"><span class="i">Endian</span></span>.<span class="e Identifier"><span class="i">LittleEndian</span></span></span></span> &amp;&amp; <span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">flPlus</span></span></span></span>
            || <span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">system</span></span></span>.<span class="e Identifier"><span class="i">endian</span></span></span> == <span class="e Dot"><span class="e Identifier"><span class="i">Endian</span></span>.<span class="e Identifier"><span class="i">BigEndian</span></span></span></span> &amp;&amp; <span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">flDash</span></span></span></span></span>)
        <span class="s Compound">{
            <span class="lc">// must swap bytes</span>
            <span class="s ForeachRange"><span class="k">foreach_reverse</span> (<span class="o Parameters"><span class="o Parameter"><span class="i">i</span></span></span>; <span class="e Int"><span class="n">0</span></span> .. <span class="e Dot"><span class="e Identifier"><span class="i">arg</span></span>.<span class="e Identifier"><span class="i">sizeof</span></span></span>)
                <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="i">begin</span>[<span class="i">i</span>])</span>;</span></span>
        }</span>
        <span class="k">else</span>
        <span class="s Compound">{
            <span class="s ForeachRange"><span class="k">foreach</span> (<span class="o Parameters"><span class="o Parameter"><span class="i">i</span></span></span>; <span class="e Int"><span class="n">0</span></span> .. <span class="e Dot"><span class="e Identifier"><span class="i">arg</span></span>.<span class="e Identifier"><span class="i">sizeof</span></span></span>)
                <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="i">begin</span>[<span class="i">i</span>])</span>;</span></span>
        }</span></span>
        <span class="s Return"><span class="k">return</span>;</span>
    }</span></span>
    <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> == <span class="e Minus"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span>.<span class="e Identifier"><span class="i">max</span></span></span> - <span class="e Int"><span class="n">1</span></span></span></span>)
    <span class="s Compound">{
        <span class="lc">// default precision for integrals is 1</span>
        <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> = <span class="e Int"><span class="n">1</span></span></span>;</span>
    }</span>
    <span class="k">else</span>
    <span class="s Compound">{
        <span class="lc">// if a precision is specified, the '0' flag is ignored.</span>
        <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">flZero</span></span></span> = <span class="e Bool"><span class="k">false</span></span></span>;</span>
    }</span></span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">char</span></span> <span class="i">leftPad</span> = <span class="e VoidInit"><span class="k">void</span></span>;</span></span>
    <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e Dot"><span class="e Not">!<span class="e Identifier"><span class="i">f</span></span></span>.<span class="e Identifier"><span class="i">flDash</span></span></span> &amp;&amp; <span class="e Dot"><span class="e Not">!<span class="e Identifier"><span class="i">f</span></span></span>.<span class="e Identifier"><span class="i">flZero</span></span></span></span>)
        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">leftPad</span></span> = <span class="e Char"><span class="cl">' '</span></span></span>;</span>
    <span class="k">else</span> <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e Dot"><span class="e Not">!<span class="e Identifier"><span class="i">f</span></span></span>.<span class="e Identifier"><span class="i">flDash</span></span></span> &amp;&amp; <span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">flZero</span></span></span></span>)
        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">leftPad</span></span> = <span class="e Char"><span class="cl">'0'</span></span></span>;</span>
    <span class="k">else</span>
        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">leftPad</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span></span></span>
    <span class="lc">// format and write an integral argument</span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">uint</span></span> <span class="i">base</span> =
        <span class="e Cond"><span class="e OrOr"><span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> == <span class="e Char"><span class="cl">'x'</span></span></span> || <span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> == <span class="e Char"><span class="cl">'X'</span></span></span></span> ? <span class="e Int"><span class="n">16</span></span> :
        <span class="e Cond"><span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> == <span class="e Char"><span class="cl">'o'</span></span></span> ? <span class="e Int"><span class="n">8</span></span> :
        <span class="e Cond"><span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> == <span class="e Char"><span class="cl">'b'</span></span></span> ? <span class="e Int"><span class="n">2</span></span> :
        <span class="e Cond"><span class="e OrOr"><span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> == <span class="e Char"><span class="cl">'s'</span></span></span> || <span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> == <span class="e Char"><span class="cl">'d'</span></span></span></span> ? <span class="e Int"><span class="n">10</span></span> :
        <span class="e Int"><span class="n">0</span></span></span></span></span></span>;</span></span>
    <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">base</span></span> == <span class="e Int"><span class="n">0</span></span></span>) <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>(<span class="e String"><span class="sl">"integral"</span></span>)</span>;</span></span>
    <span class="lc">// figure out sign and continue in unsigned mode</span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">char</span></span> <span class="i">forcedPrefix</span> = <span class="e VoidInit"><span class="k">void</span></span>;</span></span>
    <span class="s If"><span class="k">if</span> (<span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">flPlus</span></span></span>) <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">forcedPrefix</span></span> = <span class="e Char"><span class="cl">'+'</span></span></span>;</span>
    <span class="k">else</span> <span class="s If"><span class="k">if</span> (<span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">flSpace</span></span></span>) <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">forcedPrefix</span></span> = <span class="e Char"><span class="cl">' '</span></span></span>;</span>
    <span class="k">else</span> <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">forcedPrefix</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span></span></span>
    <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">base</span></span> != <span class="e Int"><span class="n">10</span></span></span>)
    <span class="s Compound">{
        <span class="lc">// non-10 bases are always unsigned</span>
        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">forcedPrefix</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
    }</span>
    <span class="k">else</span> <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">arg</span></span> &lt; <span class="e Int"><span class="n">0</span></span></span>)
    <span class="s Compound">{
        <span class="lc">// argument is signed</span>
        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">forcedPrefix</span></span> = <span class="e Char"><span class="cl">'-'</span></span></span>;</span>
        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">arg</span></span> = <span class="e Sign">-<span class="e Identifier"><span class="i">arg</span></span></span></span>;</span>
    }</span></span></span>
    <span class="lc">// fill the digits</span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">char</span></span><span class="t Array">[]</span> <span class="i">digits</span> = <span class="e VoidInit"><span class="k">void</span></span>;</span></span>
    <span class="s Scope"><span class="s Compound">{
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">char</span></span> <span class="i">buffer</span><span class="t Array">[<span class="e Int"><span class="n">64</span></span>]</span>;</span></span> <span class="lc">// 64 bits in base 2 at most</span>
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">uint</span></span> <span class="i">i</span> = <span class="e Dot"><span class="e Identifier"><span class="i">buffer</span></span>.<span class="e Identifier"><span class="i">length</span></span></span>;</span></span>
        <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">n</span> = <span class="e Cast"><span class="k">cast</span>(<span class="t TemplateInstance"><span class="i">unsigned</span>!(<span class="o TemplateArguments"><span class="t TemplateInstance"><span class="i">Mutable</span>!(<span class="o TemplateArguments"><span class="t Identifier"><span class="i">D</span></span></span>)</span></span>)</span>) <span class="e Identifier"><span class="i">arg</span></span></span>;</span></span>
        <span class="s DoWhile"><span class="k">do</span>
        <span class="s Compound">{
            <span class="s Expression"><span class="e PreDecr">--<span class="e Identifier"><span class="i">i</span></span></span>;</span>
            <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">buffer</span></span>[<span class="e Identifier"><span class="i">i</span></span>]</span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">char</span></span>)<span class="e Paren">(<span class="e Mod"><span class="e Identifier"><span class="i">n</span></span> % <span class="e Identifier"><span class="i">base</span></span></span>)</span></span></span>;</span>
            <span class="s Expression"><span class="e DivAssign"><span class="e Identifier"><span class="i">n</span></span> /= <span class="e Identifier"><span class="i">base</span></span></span>;</span>
            <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Index"><span class="e Identifier"><span class="i">buffer</span></span>[<span class="e Identifier"><span class="i">i</span></span>]</span> &lt; <span class="e Int"><span class="n">10</span></span></span>) <span class="s Expression"><span class="e PlusAssign"><span class="e Index"><span class="e Identifier"><span class="i">buffer</span></span>[<span class="e Identifier"><span class="i">i</span></span>]</span> += <span class="e Char"><span class="cl">'0'</span></span></span>;</span>
            <span class="k">else</span> <span class="s Expression"><span class="e PlusAssign"><span class="e Index"><span class="e Identifier"><span class="i">buffer</span></span>[<span class="e Identifier"><span class="i">i</span></span>]</span> += <span class="e Minus"><span class="e Paren">(<span class="e Cond"><span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> == <span class="e Char"><span class="cl">'x'</span></span></span> ? <span class="e Char"><span class="cl">'a'</span></span> : <span class="e Char"><span class="cl">'A'</span></span></span>)</span> - <span class="e Int"><span class="n">10</span></span></span></span>;</span></span>
        }</span> <span class="k">while</span> (<span class="e Identifier"><span class="i">n</span></span>)</span><span class="s Empty">;</span>
        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">digits</span></span> = <span class="e Slice"><span class="e Identifier"><span class="i">buffer</span></span>[<span class="e Identifier"><span class="i">i</span></span> .. <span class="e Dollar">$</span>]</span></span>;</span> <span class="lc">// got the digits without the sign</span>
    }</span></span>
    <span class="lc">// adjust precision to print a '0' for octal if alternate format is on</span>
    <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e AndAnd"><span class="e Equal"><span class="e Identifier"><span class="i">base</span></span> == <span class="e Int"><span class="n">8</span></span></span> &amp;&amp; <span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">flHash</span></span></span>()</span></span>
        &amp;&amp; <span class="e Paren">(<span class="e Rel"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> &lt;= <span class="e Dot"><span class="e Identifier"><span class="i">digits</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>)</span></span>) <span class="lc">// too low precision</span>
    <span class="s Compound">{
        <span class="lc">//f.precision = digits.length + (arg != 0);</span>
        <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">forcedPrefix</span></span> = <span class="e Char"><span class="cl">'0'</span></span></span>;</span>
    }</span></span>
    <span class="lc">// write left pad; write sign; write 0x or 0X; write digits;</span>
    <span class="lc">//   write right pad</span>
    <span class="lc">// Writing left pad</span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">spacesToPrint</span> = 
        <span class="e Minus"><span class="e Minus"><span class="e Minus"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">width</span></span></span> <span class="lc">// start with the minimum width</span>
        - <span class="e Dot"><span class="e Identifier"><span class="i">digits</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>  <span class="lc">// take away digits to print</span>
        - <span class="e Paren">(<span class="e Equal"><span class="e Identifier"><span class="i">forcedPrefix</span></span> != <span class="e Int"><span class="n">0</span></span></span>)</span></span> <span class="lc">// take away the sign if any</span>
        - <span class="e Paren">(<span class="e Cond"><span class="e AndAnd"><span class="e AndAnd"><span class="e Equal"><span class="e Identifier"><span class="i">base</span></span> == <span class="e Int"><span class="n">16</span></span></span> &amp;&amp; <span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">flHash</span></span></span>()</span></span> &amp;&amp; <span class="e Identifier"><span class="i">arg</span></span></span> ? <span class="e Int"><span class="n">2</span></span> : <span class="e Int"><span class="n">0</span></span></span>)</span></span>;</span></span> <span class="lc">// 0x or 0X</span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">delta</span> = <span class="e Minus"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> - <span class="e Dot"><span class="e Identifier"><span class="i">digits</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>;</span></span>
    <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">delta</span></span> &gt; <span class="e Int"><span class="n">0</span></span></span>) <span class="s Expression"><span class="e MinusAssign"><span class="e Identifier"><span class="i">spacesToPrint</span></span> -= <span class="e Identifier"><span class="i">delta</span></span></span>;</span></span>
    <span class="lc">//writeln(spacesToPrint);</span>
    <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">spacesToPrint</span></span> &gt; <span class="e Int"><span class="n">0</span></span></span>) <span class="lc">// need to do some padding</span>
    <span class="s Compound">{
        <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">leftPad</span></span> == <span class="e Char"><span class="cl">'0'</span></span></span>)
        <span class="s Compound">{
            <span class="lc">// pad with zeros</span>
            <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> =
                <span class="e Cast"><span class="k">cast</span>(<span class="t Typeof"><span class="k">typeof</span>(<span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span>)</span>) <span class="e Paren">(<span class="e Plus"><span class="e Identifier"><span class="i">spacesToPrint</span></span> + <span class="e Dot"><span class="e Identifier"><span class="i">digits</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>)</span></span></span>;</span>
                <span class="lc">//to!(typeof(f.precision))(spacesToPrint + digits.length);</span>
        }</span>
        <span class="k">else</span> <span class="s If"><span class="k">if</span> (<span class="e Identifier"><span class="i">leftPad</span></span>) <span class="s ForeachRange"><span class="k">foreach</span> (<span class="o Parameters"><span class="o Parameter"><span class="i">i</span></span></span> ; <span class="e Int"><span class="n">0</span></span> .. <span class="e Identifier"><span class="i">spacesToPrint</span></span>) <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="cl">' '</span>)</span>;</span></span></span></span>
    }</span></span>
    <span class="lc">// write sign</span>
    <span class="s If"><span class="k">if</span> (<span class="e Identifier"><span class="i">forcedPrefix</span></span>) <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="i">forcedPrefix</span>)</span>;</span></span>
    <span class="lc">// write 0x or 0X</span>
    <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e AndAnd"><span class="e Equal"><span class="e Identifier"><span class="i">base</span></span> == <span class="e Int"><span class="n">16</span></span></span> &amp;&amp; <span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">flHash</span></span></span>()</span></span> &amp;&amp; <span class="e Identifier"><span class="i">arg</span></span></span>) <span class="s Compound">{
        <span class="lc">// @@@ overcome bug in dmd;</span>
        <span class="lc">//w.write(f.spec == 'x' ? "0x" : "0X"); //crashes the compiler</span>
        <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="cl">'0'</span>)</span>;</span>
        <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="i">f</span>.<span class="i">spec</span> == <span class="cl">'x'</span> ? <span class="cl">'x'</span> : <span class="cl">'X'</span>)</span>;</span> <span class="lc">// x or X</span>
    }</span></span>
    <span class="lc">// write the digits</span>
    <span class="s If"><span class="k">if</span> (<span class="e OrOr"><span class="e Identifier"><span class="i">arg</span></span> || <span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span></span>)
    <span class="s Compound">{
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">zerosToPrint</span> = <span class="e Minus"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> - <span class="e Dot"><span class="e Identifier"><span class="i">digits</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>;</span></span>
        <span class="s ForeachRange"><span class="k">foreach</span> (<span class="o Parameters"><span class="o Parameter"><span class="i">i</span></span></span> ; <span class="e Int"><span class="n">0</span></span> .. <span class="e Identifier"><span class="i">zerosToPrint</span></span>) <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="cl">'0'</span>)</span>;</span></span>
        <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">write</span></span></span>(<span class="i">digits</span>)</span>;</span>
    }</span></span>
    <span class="lc">// write the spaces to the right if left-align</span>
    <span class="s If"><span class="k">if</span> (<span class="e Not">!<span class="e Identifier"><span class="i">leftPad</span></span></span>) <span class="s ForeachRange"><span class="k">foreach</span> (<span class="o Parameters"><span class="o Parameter"><span class="i">i</span></span></span> ; <span class="e Int"><span class="n">0</span></span> .. <span class="e Identifier"><span class="i">spacesToPrint</span></span>) <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="cl">' '</span>)</span>;</span></span></span>
}</span></span></span></span></span></span>

<span class="bc">/*
 * Formats a floating point number 'arg' according to 'f' and writes
 * it to 'w'.
 */</span> 
<span class="d Protection"><span class="k">private</span> <span class="d Template"><span class="d Compound"><span class="d Function"><span class="t Integral"><span class="k">void</span></span> <span class="i">formatFloat</span><span class="o TemplateParameters">(<span class="o TemplateTypeParameter"><span class="i">Writer</span></span>, <span class="o TemplateTypeParameter"><span class="i">D</span></span>)</span><span class="o Parameters">(<span class="o Parameter"><span class="k">ref</span> <span class="t Identifier"><span class="i">Writer</span></span> <span class="i">w</span></span>, <span class="o Parameter"><span class="t Identifier"><span class="i">D</span></span> <span class="i">obj</span></span>, <span class="o Parameter"><span class="t Identifier"><span class="i">FormatInfo</span></span> <span class="i">f</span></span>)</span>
<span class="s FuncBody"><span class="s Compound">{
    <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> == <span class="e Char"><span class="cl">'r'</span></span></span>)
    <span class="s Compound">{
        <span class="lc">// raw write, skip all else and write the thing</span>
        <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">begin</span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Const"><span class="k">const</span> <span class="t Integral"><span class="k">char</span></span><span class="t Pointer">*</span></span>) <span class="e Address">&amp;<span class="e Identifier"><span class="i">obj</span></span></span></span>;</span></span>
        <span class="s If"><span class="k">if</span> (<span class="e OrOr"><span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">system</span></span></span>.<span class="e Identifier"><span class="i">endian</span></span></span> == <span class="e Dot"><span class="e Identifier"><span class="i">Endian</span></span>.<span class="e Identifier"><span class="i">LittleEndian</span></span></span></span> &amp;&amp; <span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">flPlus</span></span></span></span>
            || <span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">system</span></span></span>.<span class="e Identifier"><span class="i">endian</span></span></span> == <span class="e Dot"><span class="e Identifier"><span class="i">Endian</span></span>.<span class="e Identifier"><span class="i">BigEndian</span></span></span></span> &amp;&amp; <span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">flDash</span></span></span></span></span>)
        <span class="s Compound">{
            <span class="lc">// must swap bytes</span>
            <span class="s ForeachRange"><span class="k">foreach_reverse</span> (<span class="o Parameters"><span class="o Parameter"><span class="i">i</span></span></span>; <span class="e Int"><span class="n">0</span></span> .. <span class="e Dot"><span class="e Identifier"><span class="i">obj</span></span>.<span class="e Identifier"><span class="i">sizeof</span></span></span>)
                <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="i">begin</span>[<span class="i">i</span>])</span>;</span></span>
        }</span>
        <span class="k">else</span>
        <span class="s Compound">{
            <span class="s ForeachRange"><span class="k">foreach</span> (<span class="o Parameters"><span class="o Parameter"><span class="i">i</span></span></span>; <span class="e Int"><span class="n">0</span></span> .. <span class="e Dot"><span class="e Identifier"><span class="i">obj</span></span>.<span class="e Identifier"><span class="i">sizeof</span></span></span>)
                <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="i">begin</span>[<span class="i">i</span>])</span>;</span></span>
        }</span></span>
        <span class="s Return"><span class="k">return</span>;</span>
    }</span></span>
    <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Call"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">std</span></span>.<span class="e Identifier"><span class="i">string</span></span></span>.<span class="e Identifier"><span class="i">find</span></span></span>(<span class="sl">"fgFGaAeEs"</span>, <span class="i">f</span>.<span class="i">spec</span>)</span> &lt; <span class="e Int"><span class="n">0</span></span></span>) <span class="s Compound">{
        <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>(<span class="e String"><span class="sl">"floating"</span></span>)</span>;</span>
    }</span></span>
    <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> == <span class="e Char"><span class="cl">'s'</span></span></span>) <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> = <span class="e Char"><span class="cl">'g'</span></span></span>;</span></span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">char</span></span> <span class="i">sprintfSpec</span><span class="t Array">[<span class="e Plus"><span class="e Plus"><span class="e Plus"><span class="e Plus"><span class="e Int"><span class="n">1</span></span> <span class="bc">/*%*/</span> + <span class="e Int"><span class="n">5</span></span></span> <span class="bc">/*flags*/</span> + <span class="e Int"><span class="n">3</span></span></span> <span class="bc">/*width.prec*/</span> + <span class="e Int"><span class="n">2</span></span></span> <span class="bc">/*format*/</span>
                     + <span class="e Int"><span class="n">1</span></span></span> <span class="bc">/*\0*/</span>]</span> = <span class="e VoidInit"><span class="k">void</span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">sprintfSpec</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e Char"><span class="cl">'%'</span></span></span>;</span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">uint</span></span> <span class="i">i</span> = <span class="e Int"><span class="n">1</span></span>;</span></span>
    <span class="s If"><span class="k">if</span> (<span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">flDash</span></span></span>) <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">sprintfSpec</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">i</span></span>++</span>]</span> = <span class="e Char"><span class="cl">'-'</span></span></span>;</span></span>
    <span class="s If"><span class="k">if</span> (<span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">flPlus</span></span></span>) <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">sprintfSpec</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">i</span></span>++</span>]</span> = <span class="e Char"><span class="cl">'+'</span></span></span>;</span></span>
    <span class="s If"><span class="k">if</span> (<span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">flZero</span></span></span>) <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">sprintfSpec</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">i</span></span>++</span>]</span> = <span class="e Char"><span class="cl">'0'</span></span></span>;</span></span>
    <span class="s If"><span class="k">if</span> (<span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">flSpace</span></span></span>) <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">sprintfSpec</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">i</span></span>++</span>]</span> = <span class="e Char"><span class="cl">' '</span></span></span>;</span></span>
    <span class="s If"><span class="k">if</span> (<span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">flHash</span></span></span>) <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">sprintfSpec</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">i</span></span>++</span>]</span> = <span class="e Char"><span class="cl">'#'</span></span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Slice"><span class="e Identifier"><span class="i">sprintfSpec</span></span>[<span class="e Identifier"><span class="i">i</span></span> .. <span class="e Plus"><span class="e Identifier"><span class="i">i</span></span> + <span class="e Int"><span class="n">3</span></span></span>]</span> = <span class="e String"><span class="sl">"*.*"</span></span></span>;</span>
    <span class="s Expression"><span class="e PlusAssign"><span class="e Identifier"><span class="i">i</span></span> += <span class="e Int"><span class="n">3</span></span></span>;</span>
    <span class="s If"><span class="k">if</span> (<span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> == <span class="t Const"><span class="k">const</span>(<span class="t Integral"><span class="k">real</span></span>)</span>)</span>) <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">sprintfSpec</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">i</span></span>++</span>]</span> = <span class="e Char"><span class="cl">'L'</span></span></span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">sprintfSpec</span></span>[<span class="e PostIncr"><span class="e Identifier"><span class="i">i</span></span>++</span>]</span> = <span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span></span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">sprintfSpec</span></span>[<span class="e Identifier"><span class="i">i</span></span>]</span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
    <span class="lc">//printf("format: '%s'; geeba: %g\n", sprintfSpec.ptr, obj);</span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">char</span></span><span class="t Array">[<span class="e Int"><span class="n">512</span></span>]</span> <span class="i">buf</span>;</span></span>
    <span class="d StorageClass"><span class="k">invariant</span> <span class="d Variables"><span class="i">n</span> = <span class="e Call"><span class="e Identifier"><span class="i">snprintf</span></span>(<span class="i">buf</span>.<span class="i">ptr</span>, <span class="i">buf</span>.<span class="i">length</span>,
                       <span class="i">sprintfSpec</span>.<span class="i">ptr</span>,
                       <span class="i">f</span>.<span class="i">width</span>,
                       <span class="lc">// negative precision is same as no precision specified</span>
                       <span class="i">f</span>.<span class="i">precision</span> == <span class="i">f</span>.<span class="i">precision</span>.<span class="i">max</span> - <span class="n">1</span> ? -<span class="n">1</span> : <span class="i">f</span>.<span class="i">precision</span>,
                       <span class="i">obj</span>)</span>;</span></span>
    <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">n</span></span> &lt; <span class="e Int"><span class="n">0</span></span></span>) <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>(<span class="e String"><span class="sl">"floating point formatting failure"</span></span>)</span>;</span></span>
    <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">write</span></span></span>(<span class="i">buf</span>[<span class="n">0</span> .. <span class="i">strlen</span>(<span class="i">buf</span>.<span class="i">ptr</span>)])</span>;</span>
}</span></span></span></span></span></span>

<span class="bc">/*
 * Formats an object of type 'D' according to 'f' and writes it to
 * 'w'. The pointer 'arg' is assumed to point to an object of type
 * 'D'.
 */</span> 
<span class="d Protection"><span class="k">private</span> <span class="d Template"><span class="d Compound"><span class="d Function"><span class="t Integral"><span class="k">void</span></span> <span class="i">formatGeneric</span><span class="o TemplateParameters">(<span class="o TemplateTypeParameter"><span class="i">Writer</span></span>, <span class="o TemplateTypeParameter"><span class="i">D</span></span>)</span><span class="o Parameters">(<span class="o Parameter"><span class="k">ref</span> <span class="t Identifier"><span class="i">Writer</span></span> <span class="i">w</span></span>, <span class="o Parameter"><span class="t Const"><span class="k">const</span>(<span class="t Integral"><span class="k">void</span></span>)</span><span class="t Pointer">*</span> <span class="i">arg</span></span>,
    <span class="o Parameter"><span class="t Identifier"><span class="i">FormatInfo</span></span> <span class="i">f</span></span>)</span>
<span class="s FuncBody"><span class="s Compound">{
    <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">obj</span> = <span class="e Deref">*<span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">D</span></span><span class="t Pointer">*</span>) <span class="e Identifier"><span class="i">arg</span></span></span></span>;</span></span>
    <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> == <span class="t Const"><span class="k">const</span>(<span class="t Integral"><span class="k">void</span></span><span class="t Array">[]</span>)</span>)</span>) <span class="s Compound">{
        <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">s</span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Const"><span class="k">const</span> <span class="t Integral"><span class="k">char</span></span><span class="t Array">[]</span></span>) <span class="e Identifier"><span class="i">obj</span></span></span>;</span></span>
        <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">write</span></span></span>(<span class="i">s</span>)</span>;</span>
    }</span> <span class="k">else</span> <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e Is"><span class="k">is</span>(<span class="t Identifier"><span class="i">D</span></span> <span class="i">Original</span> == <span class="k">typedef</span>)</span>) <span class="s Compound">{
        <span class="s Expression"><span class="e Call"><span class="e TemplateInstance"><span class="i">formatGeneric</span>!(<span class="o TemplateArguments"><span class="t Identifier"><span class="i">Writer</span></span>, <span class="t Identifier"><span class="i">Original</span></span></span>)</span>(<span class="i">w</span>, <span class="i">arg</span>, <span class="i">f</span>)</span>;</span>
    }</span> <span class="k">else</span> <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e OrOr"><span class="e OrOr"><span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span> <span class="t Identifier"><span class="i">D</span></span></span> == <span class="t Const"><span class="k">const</span>(<span class="t Integral"><span class="k">float</span></span>)</span>)</span>
                      || <span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> == <span class="t Const"><span class="k">const</span>(<span class="t Integral"><span class="k">double</span></span>)</span>)</span></span>
                      || <span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> == <span class="t Const"><span class="k">const</span>(<span class="t Integral"><span class="k">real</span></span>)</span>)</span></span>) <span class="s Compound">{
        <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatFloat</span></span>(<span class="i">w</span>, <span class="i">obj</span>, <span class="i">f</span>)</span>;</span>
    }</span> <span class="k">else</span> <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> == <span class="t Const"><span class="k">const</span> <span class="t Integral"><span class="k">ifloat</span></span></span>)</span>) <span class="s Compound">{
        <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatFloat</span></span>(<span class="i">w</span>, *<span class="k">cast</span>(<span class="k">float</span>*) &amp;<span class="i">obj</span>, <span class="i">f</span>)</span>;</span>
    }</span> <span class="k">else</span> <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> == <span class="t Const"><span class="k">const</span> <span class="t Integral"><span class="k">idouble</span></span></span>)</span>) <span class="s Compound">{
        <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatFloat</span></span>(<span class="i">w</span>, *<span class="k">cast</span>(<span class="k">double</span>*) &amp;<span class="i">obj</span>, <span class="i">f</span>)</span>;</span>
    }</span> <span class="k">else</span> <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> == <span class="t Const"><span class="k">const</span> <span class="t Integral"><span class="k">ireal</span></span></span>)</span>) <span class="s Compound">{
        <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatFloat</span></span>(<span class="i">w</span>, *<span class="k">cast</span>(<span class="k">real</span>*) &amp;<span class="i">obj</span>, <span class="i">f</span>)</span>;</span>
    }</span> <span class="k">else</span> <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e OrOr"><span class="e OrOr"><span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> == <span class="t Const"><span class="k">const</span> <span class="t Integral"><span class="k">cfloat</span></span></span>)</span>
                      || <span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> == <span class="t Const"><span class="k">const</span> <span class="t Integral"><span class="k">cdouble</span></span></span>)</span></span>
                      || <span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> == <span class="t Const"><span class="k">const</span> <span class="t Integral"><span class="k">creal</span></span></span>)</span></span>) <span class="s Compound">{
        <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatFloat</span></span>(<span class="i">w</span>, <span class="i">obj</span>.<span class="i">re</span>, <span class="i">f</span>)</span>;</span>
        <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">write</span></span></span>(<span class="sl">"+"</span>)</span>;</span>
        <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatFloat</span></span>(<span class="i">w</span>, <span class="i">obj</span>.<span class="i">im</span>, <span class="i">f</span>)</span>;</span>
        <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">write</span></span></span>(<span class="sl">"i"</span>)</span>;</span>
    }</span> <span class="k">else</span> <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e OrOr"><span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> : <span class="t Const"><span class="k">const</span> <span class="t Integral"><span class="k">long</span></span></span>)</span> || <span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> : <span class="t Const"><span class="k">const</span> <span class="t Integral"><span class="k">ulong</span></span></span>)</span></span>) <span class="s Compound">{
        <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> == <span class="t Const"><span class="k">const</span> <span class="t Integral"><span class="k">bool</span></span></span>)</span>) <span class="s Compound">{
            <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> == <span class="e Char"><span class="cl">'s'</span></span></span>) <span class="s Compound">{
                <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">write</span></span></span>(<span class="i">obj</span> ? <span class="sl">"true"</span> : <span class="sl">"false"</span>)</span>;</span>
            }</span> <span class="k">else</span> <span class="s Compound">{
                <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatIntegral</span></span>(<span class="i">w</span>, <span class="k">cast</span>(<span class="k">int</span>) <span class="i">obj</span>, <span class="i">f</span>)</span>;</span>
            }</span></span>
        }</span> <span class="k">else</span> <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e OrOr"><span class="e OrOr"><span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> == <span class="t Const"><span class="k">const</span> <span class="t Integral"><span class="k">char</span></span></span>)</span>
                          || <span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> == <span class="t Const"><span class="k">const</span> <span class="t Integral"><span class="k">wchar</span></span></span>)</span></span>
                          || <span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> == <span class="t Const"><span class="k">const</span> <span class="t Integral"><span class="k">dchar</span></span></span>)</span></span>) <span class="s Compound">{
            <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> == <span class="e Char"><span class="cl">'s'</span></span></span>) <span class="s Compound">{
                <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="i">obj</span>)</span>;</span>
            }</span> <span class="k">else</span> <span class="s Compound">{
                <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatIntegral</span></span>(<span class="i">w</span>, <span class="k">cast</span>(<span class="k">uint</span>) <span class="i">obj</span>, <span class="i">f</span>)</span>;</span>
            }</span></span>
        }</span> <span class="k">else</span> <span class="s Compound">{
            <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formatIntegral</span></span>(<span class="i">w</span>, <span class="i">obj</span>, <span class="i">f</span>)</span>;</span>
        }</span></span></span>
    }</span> <span class="k">else</span> <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e OrOr"><span class="e OrOr"><span class="e Is"><span class="k">is</span>(<span class="t Identifier"><span class="i">D</span></span> : <span class="t Const"><span class="k">const</span>(<span class="t Integral"><span class="k">char</span></span>)</span><span class="t Array">[]</span>)</span> || <span class="e Is"><span class="k">is</span>(<span class="t Identifier"><span class="i">D</span></span> : <span class="t Const"><span class="k">const</span>(<span class="t Integral"><span class="k">wchar</span></span>)</span><span class="t Array">[]</span>)</span></span>
                      || <span class="e Is"><span class="k">is</span>(<span class="t Identifier"><span class="i">D</span></span> : <span class="t Const"><span class="k">const</span>(<span class="t Integral"><span class="k">dchar</span></span>)</span><span class="t Array">[]</span>)</span></span>) <span class="s Compound">{
        <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">s</span> = <span class="e Slice"><span class="e Identifier"><span class="i">obj</span></span>[<span class="e Int"><span class="n">0</span></span> .. <span class="e Cond"><span class="e Rel"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> &lt; <span class="e Dollar">$</span></span> ? <span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> : <span class="e Dollar">$</span></span>]</span>;</span></span>
        <span class="s If"><span class="k">if</span> (<span class="e Dot"><span class="e Not">!<span class="e Identifier"><span class="i">f</span></span></span>.<span class="e Identifier"><span class="i">flDash</span></span></span>)
        <span class="s Compound">{
            <span class="lc">// right align</span>
            <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">width</span></span></span> &gt; <span class="e Dot"><span class="e Identifier"><span class="i">s</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>)
                <span class="s ForeachRange"><span class="k">foreach</span> (<span class="o Parameters"><span class="o Parameter"><span class="i">i</span></span></span> ; <span class="e Int"><span class="n">0</span></span> .. <span class="e Minus"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">width</span></span></span> - <span class="e Dot"><span class="e Identifier"><span class="i">s</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>) <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="cl">' '</span>)</span>;</span></span></span>
            <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">write</span></span></span>(<span class="i">s</span>)</span>;</span>
        }</span>
        <span class="k">else</span>
        <span class="s Compound">{
            <span class="lc">// left align</span>
            <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">write</span></span></span>(<span class="i">s</span>)</span>;</span>
            <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">width</span></span></span> &gt; <span class="e Dot"><span class="e Identifier"><span class="i">s</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>)
                <span class="s ForeachRange"><span class="k">foreach</span> (<span class="o Parameters"><span class="o Parameter"><span class="i">i</span></span></span> ; <span class="e Int"><span class="n">0</span></span> .. <span class="e Minus"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">width</span></span></span> - <span class="e Dot"><span class="e Identifier"><span class="i">s</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>) <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="cl">' '</span>)</span>;</span></span></span>
        }</span></span>
    }</span> <span class="k">else</span> <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e Is"><span class="k">is</span>(<span class="t Identifier"><span class="i">D</span></span> == <span class="t Integral"><span class="k">void</span></span><span class="t Array">[<span class="e Int"><span class="n">0</span></span>]</span>)</span>) <span class="s Compound">{
        <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="cl">'['</span>)</span>;</span>
        <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="cl">']'</span>)</span>;</span>
    }</span> <span class="k">else</span> <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e TemplateInstance"><span class="i">isArray</span>!(<span class="o TemplateArguments"><span class="t Identifier"><span class="i">D</span></span></span>)</span>) <span class="s Compound">{
        <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> != <span class="e Char"><span class="cl">'r'</span></span></span>) <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="cl">'['</span>)</span>;</span></span> <span class="lc">// only write the brackets if not raw</span>
        <span class="s Foreach"><span class="k">foreach</span> (<span class="o Parameters"><span class="o Parameter"><span class="i">i</span></span>, <span class="o Parameter"><span class="i">e</span></span></span>; <span class="e Identifier"><span class="i">obj</span></span>)
        <span class="s Compound">{
            <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> != <span class="e Char"><span class="cl">'r'</span></span></span> &amp;&amp; <span class="e Rel"><span class="e Identifier"><span class="i">i</span></span> &gt; <span class="e Int"><span class="n">0</span></span></span></span>) <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="cl">' '</span>)</span>;</span></span>
            <span class="s Expression"><span class="e Call"><span class="e TemplateInstance"><span class="i">formatGeneric</span>!(<span class="o TemplateArguments"><span class="t Identifier"><span class="i">Writer</span></span>, <span class="t Typeof"><span class="k">typeof</span>(<span class="e Identifier"><span class="i">e</span></span>)</span></span>)</span>(<span class="i">w</span>, &amp;<span class="i">e</span>, <span class="i">f</span>)</span>;</span>
        }</span></span>
        <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> != <span class="e Char"><span class="cl">'r'</span></span></span>) <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">putchar</span></span></span>(<span class="cl">']'</span>)</span>;</span></span> <span class="lc">// only write the brackets if not raw</span>
    }</span> <span class="k">else</span> <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> : <span class="t Const"><span class="k">const</span> <span class="t Integral"><span class="k">void</span></span><span class="t Pointer">*</span></span>)</span>) <span class="s Compound">{
        <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">f</span></span>.<span class="e Identifier"><span class="i">spec</span></span></span> = <span class="e Char"><span class="cl">'X'</span></span></span>;</span>
        <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">ulong</span></span> <span class="i">fake</span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">ulong</span></span>) <span class="e Identifier"><span class="i">obj</span></span></span>;</span></span>
        <span class="s Expression"><span class="e Call"><span class="e TemplateInstance"><span class="i">formatGeneric</span>!(<span class="o TemplateArguments"><span class="t Identifier"><span class="i">Writer</span></span>, <span class="t Integral"><span class="k">ulong</span></span></span>)</span>(<span class="i">w</span>, &amp;<span class="i">fake</span>, <span class="i">f</span>)</span>;</span>
    }</span> <span class="k">else</span> <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e Is"><span class="k">is</span>(<span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">D</span></span>)</span> : <span class="t Const"><span class="k">const</span> <span class="t Identifier"><span class="i">Object</span></span></span>)</span>) <span class="s Compound">{
        <span class="s If"><span class="k">if</span> (<span class="e Identity"><span class="e Identifier"><span class="i">obj</span></span> <span class="k">is</span> <span class="e Null"><span class="k">null</span></span></span>) <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">write</span></span></span>(<span class="sl">"null"</span>)</span>;</span>
        <span class="k">else</span> <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">write</span></span></span>(<span class="i">obj</span>.<span class="i">toString</span>)</span>;</span></span>
    }</span> <span class="k">else</span> <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e TemplateInstance"><span class="i">isAssociativeArray</span>!(<span class="o TemplateArguments"><span class="t Identifier"><span class="i">D</span></span></span>)</span>) <span class="s Compound">{
        <span class="lc">// somebody rid me of this hack</span>
        <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">write</span></span></span>(<span class="i">std</span>.<span class="i">string</span>.<span class="i">format</span>(<span class="sl">"%s"</span>, <span class="i">obj</span>))</span>;</span>
    }</span> <span class="k">else</span> <span class="s Compound">{
        <span class="lc">// last resort: look for toString</span>
        <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">s</span> = <span class="e Dot"><span class="e Identifier"><span class="i">obj</span></span>.<span class="e Identifier"><span class="i">toString</span></span></span>;</span></span>
        <span class="s Expression"><span class="e Call"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">write</span></span></span>(<span class="i">s</span>)</span>;</span>                                        
        <span class="lc">//static assert(false, "Cannot format type " ~ D.stringof);</span>
    }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
}</span></span></span></span></span></span>

<span class="lc">//-------------------------------------------------------------------------------</span>
<span class="lc">// Fix for issue 1591</span>
<span class="d Protection"><span class="k">private</span> <span class="d Template"><span class="d Compound"><span class="d Function"><span class="t Integral"><span class="k">int</span></span> <span class="i">getNthInt</span><span class="o TemplateParameters">(<span class="o TemplateTupleParameter"><span class="i">A</span>...</span>)</span><span class="o Parameters">(<span class="o Parameter"><span class="t Integral"><span class="k">uint</span></span> <span class="i">index</span></span>, <span class="o Parameter"><span class="t Identifier"><span class="i">A</span></span> <span class="i">args</span></span>)</span>
<span class="s FuncBody"><span class="s Compound">{
    <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e Dot"><span class="e Identifier"><span class="i">A</span></span>.<span class="e Identifier"><span class="i">length</span></span></span>)
    <span class="s Compound">{
        <span class="s If"><span class="k">if</span> (<span class="e Identifier"><span class="i">index</span></span>)
        <span class="s Compound">{
            <span class="s Return"><span class="k">return</span> <span class="e Call"><span class="e Identifier"><span class="i">getNthInt</span></span>(<span class="i">index</span> - <span class="n">1</span>, <span class="i">args</span>[<span class="n">1</span> .. $])</span>;</span> 
        }</span></span>
        <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e OrOr"><span class="e Is"><span class="k">is</span>(<span class="t Typeof"><span class="k">typeof</span>(<span class="e Index"><span class="e Identifier"><span class="i">args</span></span>[<span class="e Int"><span class="n">0</span></span>]</span>)</span> : <span class="t Integral"><span class="k">long</span></span>)</span> || <span class="e Is"><span class="k">is</span>(<span class="t Typeof"><span class="k">typeof</span>(<span class="e Identifier"><span class="i">arg</span></span>)</span> : <span class="t Integral"><span class="k">ulong</span></span>)</span></span>)
        <span class="s Compound">{
            <span class="s Return"><span class="k">return</span> <span class="e Call"><span class="e TemplateInstance"><span class="i">to</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">int</span></span></span>)</span>(<span class="i">args</span>[<span class="n">0</span>])</span>;</span>
        }</span>
        <span class="k">else</span>
        <span class="s Compound">{
            <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>(<span class="e String"><span class="sl">"int expected"</span></span>)</span>;</span>
        }</span></span>
    }</span>
    <span class="k">else</span>
    <span class="s Compound">{
        <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>(<span class="e String"><span class="sl">"int expected"</span></span>)</span>;</span>
    }</span></span>
}</span></span></span></span></span></span>

<span class="bc">/*
  (Not public yet.)  Formats arguments 'args' according to the format
  string 'fmt' and writes the result to 'w'. 'F' must be char, wchar,
  or dchar.

  Example:
  
-------------------------
import std.c.stdio;
import std.format;

string myFormat(A...)(A args)
{
    StringWriter!(char) writer;
    std.format.formattedWrite(writer, "%s et %s numeris romanis non sunt", args);
    return writer.backend;
}

...

int x = 42;
assert(myFormat(x, 0) == "42 et 0 numeris romanis non sunt");
------------------------
 
formattedWrite supports positional parameter syntax in $(WEB
opengroup.org/onlinepubs/009695399/functions/printf.html, POSIX)
style.  Example:

-------------------------
StringWriter!(char) writer;
std.format.formattedWrite(writer, "Date: %2$s %1$s", "October", 5);
assert(writer.backend == "Date: 5 October");
------------------------

The positional and non-positional styles can be mixed in the same
format string. (POSIX leaves this behavior undefined.) The internal
counter for non-positional parameters tracks the next parameter after
the largest positional parameter already used.

Warning:

This is the function internally used by writef* but it's still
undergoing active development. Do not rely on it.
*/</span>

<span class="d Template"><span class="d Compound"><span class="d Function"><span class="t Integral"><span class="k">void</span></span> <span class="i">formattedWrite</span><span class="o TemplateParameters">(<span class="o TemplateTypeParameter"><span class="i">Writer</span></span>, <span class="o TemplateTypeParameter"><span class="i">F</span></span>, <span class="o TemplateTupleParameter"><span class="i">A</span>...</span>)</span><span class="o Parameters">(<span class="o Parameter"><span class="k">ref</span> <span class="t Identifier"><span class="i">Writer</span></span> <span class="i">w</span></span>, <span class="o Parameter"><span class="t Const"><span class="k">const</span>(<span class="t Identifier"><span class="i">F</span></span>)</span><span class="t Array">[]</span> <span class="i">fmt</span></span>, <span class="o Parameter"><span class="t Identifier"><span class="i">A</span></span> <span class="i">args</span></span>)</span>
<span class="s FuncBody"><span class="s Compound">{
    <span class="d StorageClass"><span class="k">invariant</span> <span class="d Variables"><span class="i">len</span> = <span class="e Dot"><span class="e Identifier"><span class="i">args</span></span>.<span class="e Identifier"><span class="i">length</span></span></span>;</span></span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">void</span></span> <span class="t Function"><span class="k">function</span><span class="o Parameters">(<span class="o Parameter"><span class="k">ref</span> <span class="t Identifier"><span class="i">Writer</span></span></span>, <span class="o Parameter"><span class="t Const"><span class="k">const</span>(<span class="t Integral"><span class="k">void</span></span>)</span><span class="t Pointer">*</span></span>, <span class="o Parameter"><span class="t Identifier"><span class="i">FormatInfo</span></span></span>)</span></span> <span class="i">funs</span><span class="t Array">[<span class="t Identifier"><span class="i">len</span></span>]</span> = <span class="e VoidInit"><span class="k">void</span></span>;</span></span>
    <span class="d Variables"><span class="t Const"><span class="k">const</span>(<span class="t Integral"><span class="k">void</span></span>)</span><span class="t Pointer">*</span> <span class="i">argsAddresses</span><span class="t Array">[<span class="t Identifier"><span class="i">len</span></span>]</span> = <span class="e VoidInit"><span class="k">void</span></span>;</span>
    <span class="s Foreach"><span class="k">foreach</span> (<span class="o Parameters"><span class="o Parameter"><span class="i">i</span></span>, <span class="o Parameter"><span class="i">arg</span></span></span>; <span class="e Identifier"><span class="i">args</span></span>)
    <span class="s Compound">{
        <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">funs</span></span>[<span class="e Identifier"><span class="i">i</span></span>]</span> = <span class="e Address">&amp;<span class="e TemplateInstance"><span class="i">formatGeneric</span>!(<span class="o TemplateArguments"><span class="t Identifier"><span class="i">Writer</span></span>, <span class="t Typeof"><span class="k">typeof</span>(<span class="e Identifier"><span class="i">arg</span></span>)</span></span>)</span></span></span>;</span>
        <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">argsAddresses</span></span>[<span class="e Identifier"><span class="i">i</span></span>]</span> = <span class="e Address">&amp;<span class="e Identifier"><span class="i">arg</span></span></span></span>;</span>
    }</span></span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">uint</span></span> <span class="i">currentArg</span> = <span class="e Int"><span class="n">0</span></span>;</span></span>
    <span class="s For"><span class="k">for</span> (;;)
    <span class="s Compound">{
        <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">writeUpToFormatSpec</span></span>(<span class="i">w</span>, <span class="i">fmt</span>)</span>;</span>
        <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">spec</span> = <span class="e Call"><span class="e Identifier"><span class="i">parseFormatSpec</span></span>(<span class="i">fmt</span>)</span>;</span></span>
        <span class="s If"><span class="k">if</span> (<span class="e AndAnd"><span class="e Equal"><span class="e Identifier"><span class="i">currentArg</span></span> == <span class="e Dot"><span class="e Identifier"><span class="i">funs</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span> &amp;&amp; <span class="e Dot"><span class="e Not">!<span class="e Identifier"><span class="i">spec</span></span></span>.<span class="e Identifier"><span class="i">index</span></span></span></span>)
        <span class="s Compound">{
            <span class="lc">// leftover spec?</span>
            <span class="s If"><span class="k">if</span> (<span class="e Dot"><span class="e Identifier"><span class="i">fmt</span></span>.<span class="e Identifier"><span class="i">length</span></span></span>)
            <span class="s Compound">{
                <span class="s Throw"><span class="k">throw</span> <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">FormatError</span></span>(
                    <span class="e Cast"><span class="k">cast</span>(<span class="t Identifier"><span class="i">string</span></span>) <span class="e Paren">(<span class="e Cat"><span class="e String"><span class="sl">"Orphan format specifier: %"</span></span> ~ <span class="e Identifier"><span class="i">fmt</span></span></span>)</span></span>)</span>;</span>
            }</span></span>
            <span class="s Break"><span class="k">break</span>;</span>
        }</span></span>
        <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">width</span></span></span> == <span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">width</span></span></span>.<span class="e Identifier"><span class="i">max</span></span></span></span>)
        <span class="s Compound">{
            <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">width</span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">to</span>!(<span class="o TemplateArguments"><span class="t Typeof"><span class="k">typeof</span>(<span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">width</span></span></span>)</span></span>)</span>(<span class="i">getNthInt</span>(<span class="i">currentArg</span>, <span class="i">args</span>))</span>;</span></span>
            <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">width</span></span> &lt; <span class="e Int"><span class="n">0</span></span></span>)
            <span class="s Compound">{
                <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">flDash</span></span></span> = <span class="e Bool"><span class="k">true</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">width</span></span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">short</span></span>)<span class="e Paren">(<span class="e Minus"><span class="e Int"><span class="n">0</span></span> - <span class="e Identifier"><span class="i">width</span></span></span>)</span></span></span>;</span>
            }</span></span>
            <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">width</span></span></span> = <span class="e Identifier"><span class="i">width</span></span></span>;</span>
            <span class="s Expression"><span class="e PreIncr">++<span class="e Identifier"><span class="i">currentArg</span></span></span>;</span>
        }</span>
        <span class="k">else</span> <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">width</span></span></span> &lt; <span class="e Int"><span class="n">0</span></span></span>)
        <span class="s Compound">{
            <span class="lc">// means: get width as a positional parameter</span>
            <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">index</span> = <span class="e Dot"><span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">uint</span></span>) <span class="e Sign">-<span class="e Identifier"><span class="i">spec</span></span></span></span>.<span class="e Identifier"><span class="i">width</span></span></span>;</span></span>
            <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">width</span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">to</span>!(<span class="o TemplateArguments"><span class="t Typeof"><span class="k">typeof</span>(<span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">width</span></span></span>)</span></span>)</span>(<span class="i">getNthInt</span>(<span class="i">index</span>, <span class="i">args</span>))</span>;</span></span>
            <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">currentArg</span></span> &lt; <span class="e Identifier"><span class="i">index</span></span></span>) <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">currentArg</span></span> = <span class="e Identifier"><span class="i">index</span></span></span>;</span></span>
            <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">width</span></span> &lt; <span class="e Int"><span class="n">0</span></span></span>)
            <span class="s Compound">{
                <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">flDash</span></span></span> = <span class="e Bool"><span class="k">true</span></span></span>;</span>
                <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">width</span></span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">short</span></span>)<span class="e Paren">(<span class="e Minus"><span class="e Int"><span class="n">0</span></span> - <span class="e Identifier"><span class="i">width</span></span></span>)</span></span></span>;</span>
            }</span></span>
            <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">width</span></span></span> = <span class="e Identifier"><span class="i">width</span></span></span>;</span>
        }</span></span></span>
        <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> == <span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span>.<span class="e Identifier"><span class="i">max</span></span></span></span>)
        <span class="s Compound">{
            <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">precision</span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">to</span>!(<span class="o TemplateArguments"><span class="t Typeof"><span class="k">typeof</span>(<span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span>)</span></span>)</span>(
                <span class="i">getNthInt</span>(<span class="i">currentArg</span>, <span class="i">args</span>))</span>;</span></span>
            <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">precision</span></span> &gt;= <span class="e Int"><span class="n">0</span></span></span>) <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> = <span class="e Identifier"><span class="i">precision</span></span></span>;</span>
            <span class="lc">// else negative precision is same as no precision</span>
            <span class="k">else</span> <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> = <span class="e Minus"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span>.<span class="e Identifier"><span class="i">max</span></span></span> - <span class="e Int"><span class="n">1</span></span></span></span>;</span></span>
            <span class="s Expression"><span class="e PreIncr">++<span class="e Identifier"><span class="i">currentArg</span></span></span>;</span>
        }</span>
        <span class="k">else</span> <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> &lt; <span class="e Int"><span class="n">0</span></span></span>)
        <span class="s Compound">{
            <span class="lc">// means: get precision as a positional parameter</span>
            <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">index</span> = <span class="e Dot"><span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">uint</span></span>) <span class="e Sign">-<span class="e Identifier"><span class="i">spec</span></span></span></span>.<span class="e Identifier"><span class="i">precision</span></span></span>;</span></span>
            <span class="d StorageClass"><span class="k">auto</span> <span class="d Variables"><span class="i">precision</span> = <span class="e Call"><span class="e TemplateInstance"><span class="i">to</span>!(<span class="o TemplateArguments"><span class="t Typeof"><span class="k">typeof</span>(<span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span>)</span></span>)</span>(
                <span class="i">getNthInt</span>(<span class="i">index</span>, <span class="i">args</span>))</span>;</span></span>
            <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">currentArg</span></span> &lt; <span class="e Identifier"><span class="i">index</span></span></span>) <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">currentArg</span></span> = <span class="e Identifier"><span class="i">index</span></span></span>;</span></span>
            <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">precision</span></span> &gt;= <span class="e Int"><span class="n">0</span></span></span>) <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> = <span class="e Identifier"><span class="i">precision</span></span></span>;</span>
            <span class="lc">// else negative precision is same as no precision</span>
            <span class="k">else</span> <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span> = <span class="e Minus"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">precision</span></span></span>.<span class="e Identifier"><span class="i">max</span></span></span> - <span class="e Int"><span class="n">1</span></span></span></span>;</span></span>
        }</span></span></span>
        <span class="lc">// Format!</span>
        <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">index</span></span></span> &gt; <span class="e Int"><span class="n">0</span></span></span>)
        <span class="s Compound">{
            <span class="lc">// using positional parameters!</span>
            <span class="s Expression"><span class="e Call"><span class="e Index"><span class="e Identifier"><span class="i">funs</span></span>[<span class="e Minus"><span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">index</span></span></span> - <span class="e Int"><span class="n">1</span></span></span>]</span>(<span class="i">w</span>, <span class="i">argsAddresses</span>[<span class="i">spec</span>.<span class="i">index</span> - <span class="n">1</span>], <span class="i">spec</span>)</span>;</span>
            <span class="s If"><span class="k">if</span> (<span class="e Rel"><span class="e Identifier"><span class="i">currentArg</span></span> &lt; <span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">index</span></span></span></span>) <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">currentArg</span></span> = <span class="e Dot"><span class="e Identifier"><span class="i">spec</span></span>.<span class="e Identifier"><span class="i">index</span></span></span></span>;</span></span>
        }</span>
        <span class="k">else</span>
        <span class="s Compound">{
            <span class="s Expression"><span class="e Call"><span class="e Index"><span class="e Identifier"><span class="i">funs</span></span>[<span class="e Identifier"><span class="i">currentArg</span></span>]</span>(<span class="i">w</span>, <span class="i">argsAddresses</span>[<span class="i">currentArg</span>], <span class="i">spec</span>)</span>;</span>
            <span class="s Expression"><span class="e PreIncr">++<span class="e Identifier"><span class="i">currentArg</span></span></span>;</span>
        }</span></span>
    }</span></span>
}</span></span></span></span></span>

<span class="bc">/* ======================== Unit Tests ====================================== */</span>

<span class="d Unittest"><span class="k">unittest</span>
<span class="s FuncBody"><span class="s Compound">{
    <span class="s Declaration"><span class="d Variables"><span class="t TemplateInstance"><span class="i">StringWriter</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">char</span></span></span>)</span> <span class="i">stream</span>;</span></span>
    <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%s"</span>, <span class="n">1.1</span>)</span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"1.1"</span></span></span>, <span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span>)</span>;</span>
}</span></span></span>

<span class="d Unittest"><span class="k">unittest</span>
<span class="s FuncBody"><span class="s Compound">{
    <span class="lc">// testing raw writes</span>
    <span class="s Declaration"><span class="d Variables"><span class="t TemplateInstance"><span class="i">StringWriter</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">char</span></span></span>)</span> <span class="i">w</span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>
    <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">uint</span></span> <span class="i">a</span> = <span class="e Int"><span class="n">0x02030405</span></span>;</span></span>
    <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">w</span>, <span class="sl">"%+r"</span>, <span class="i">a</span>)</span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e AndAnd"><span class="e AndAnd"><span class="e AndAnd"><span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span>.<span class="e Identifier"><span class="i">length</span></span></span> == <span class="e Int"><span class="n">4</span></span></span> &amp;&amp; <span class="e Equal"><span class="e Index"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span>[<span class="e Int"><span class="n">0</span></span>]</span> == <span class="e Int"><span class="n">2</span></span></span></span> &amp;&amp; <span class="e Equal"><span class="e Index"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span>[<span class="e Int"><span class="n">1</span></span>]</span> == <span class="e Int"><span class="n">3</span></span></span></span>
        &amp;&amp; <span class="e Equal"><span class="e Index"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span>[<span class="e Int"><span class="n">2</span></span>]</span> == <span class="e Int"><span class="n">4</span></span></span></span> &amp;&amp; <span class="e Equal"><span class="e Index"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span>[<span class="e Int"><span class="n">3</span></span>]</span> == <span class="e Int"><span class="n">5</span></span></span></span>)</span>;</span>
    <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>
    <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">w</span>, <span class="sl">"%-r"</span>, <span class="i">a</span>)</span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e AndAnd"><span class="e AndAnd"><span class="e AndAnd"><span class="e AndAnd"><span class="e Equal"><span class="e Dot"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span>.<span class="e Identifier"><span class="i">length</span></span></span> == <span class="e Int"><span class="n">4</span></span></span> &amp;&amp; <span class="e Equal"><span class="e Index"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span>[<span class="e Int"><span class="n">0</span></span>]</span> == <span class="e Int"><span class="n">5</span></span></span></span> &amp;&amp; <span class="e Equal"><span class="e Index"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span>[<span class="e Int"><span class="n">1</span></span>]</span> == <span class="e Int"><span class="n">4</span></span></span></span>
        &amp;&amp; <span class="e Equal"><span class="e Index"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span>[<span class="e Int"><span class="n">2</span></span>]</span> == <span class="e Int"><span class="n">3</span></span></span></span> &amp;&amp; <span class="e Equal"><span class="e Index"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span>[<span class="e Int"><span class="n">3</span></span>]</span> == <span class="e Int"><span class="n">2</span></span></span></span>)</span>;</span>
}</span></span></span>

<span class="d Unittest"><span class="k">unittest</span>
<span class="s FuncBody"><span class="s Compound">{
    <span class="lc">// testing positional parameters</span>
    <span class="s Declaration"><span class="d Variables"><span class="t TemplateInstance"><span class="i">StringWriter</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">char</span></span></span>)</span> <span class="i">w</span>;</span></span>
    <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>
    <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">w</span>, <span class="sl">"Numbers %2$s and %1$s are reversed and %1$s%2$s repeated"</span>,
        <span class="n">42</span>, <span class="n">0</span>)</span>;</span>
    <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"Numbers 0 and 42 are reversed and 420 repeated"</span></span></span>,
        <span class="e Dot"><span class="e Identifier"><span class="i">w</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span>)</span>;</span>
}</span></span></span>

<span class="d Unittest"><span class="k">unittest</span>
<span class="s FuncBody"><span class="s Compound">{
  <span class="s Debug"><span class="k">debug</span>(<span class="i">format</span>) <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">printf</span></span>(<span class="sl">"std.format.format.unittest\n"</span>)</span>;</span></span>
    
  <span class="s Declaration"><span class="d Variables"><span class="t TemplateInstance"><span class="i">StringWriter</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">char</span></span></span>)</span> <span class="i">stream</span>;</span></span>
  <span class="lc">//goto here;</span>
  
  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"hello world! %s %s "</span>, <span class="k">true</span>, <span class="n">57</span>, <span class="n">1_000_000_000</span>, <span class="cl">'x'</span>, <span class="sl">" foo"</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"hello world! true 57 1000000000x foo"</span></span></span>)</span>;</span>

  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>
  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%g %A "</span>, <span class="n">1.67</span>, -<span class="n">1.28</span>, <span class="k">float</span>.<span class="i">nan</span>)</span>;</span>
  <span class="lc">//std.c.stdio.fwrite(stream.backend.ptr, stream.backend.length, 1, stderr);</span>
  <span class="bc">/* The host C library is used to format floats.
   * C99 doesn't specify what the hex digit before the decimal point
   * is for %A.
   */</span>
  <span class="s Version"><span class="k">version</span> (<span class="i">linux</span>)
      <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"1.67 -0X1.47AE147AE147BP+0 nan"</span></span></span>, <span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span>)</span>;</span>
  <span class="k">else</span>
      <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"1.67 -0X1.47AE147AE147BP+0 nan"</span></span></span>)</span>;</span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>

  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%x %X"</span>, <span class="n">0x1234AF</span>, <span class="n">0xAFAFAFAF</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"1234af AFAFAFAF"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>

  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%b %o"</span>, <span class="n">0x1234AF</span>, <span class="n">0xAFAFAFAF</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"100100011010010101111 25753727657"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>

  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%d %s"</span>, <span class="n">0x1234AF</span>, <span class="n">0xAFAFAFAF</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"1193135 2947526575"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>
  
  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%s"</span>, <span class="n">1.2</span> + <span class="n">3.4i</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"1.2+3.4i"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>
  
  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%a %A"</span>, <span class="n">1.32</span>, <span class="n">6.78f</span>)</span>;</span>
  <span class="lc">//formattedWrite(stream, "%x %X", 1.32);</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"0x1.51eb851eb851fp+0 0X1.B1EB86P+2"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>

  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%#06.*f"</span>,<span class="n">2</span>,<span class="n">12.345</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"012.35"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>

  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%#0*.*f"</span>,<span class="n">6</span>,<span class="n">2</span>,<span class="n">12.345</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"012.35"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>

  <span class="d StorageClass"><span class="k">const</span> <span class="d Variables"><span class="t Integral"><span class="k">real</span></span> <span class="i">constreal</span> = <span class="e Int"><span class="n">1</span></span>;</span></span>
  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%g"</span>,<span class="i">constreal</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"1"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>

  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%7.4g:"</span>, <span class="n">12.678</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"  12.68:"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>
  
  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%7.4g:"</span>, <span class="n">12.678L</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"  12.68:"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>
  
  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%04f|%05d|%#05x|%#5x"</span>,-<span class="n">4.</span>,-<span class="n">10</span>,<span class="n">1</span>,<span class="n">1</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"-4.000000|-0010|0x001|  0x1"</span></span></span>,
      <span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>
  
  <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">i</span>;</span></span>
  <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">string</span></span> <span class="i">s</span>;</span></span>
  
  <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e Sign">-<span class="e Int"><span class="n">10</span></span></span></span>;</span>
  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%d|%3d|%03d|%1d|%01.4f"</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="k">cast</span>(<span class="k">double</span>) <span class="i">i</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"-10|-10|-10|-10|-10.0000"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>

  <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e Sign">-<span class="e Int"><span class="n">5</span></span></span></span>;</span>
  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%d|%3d|%03d|%1d|%01.4f"</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="k">cast</span>(<span class="k">double</span>) <span class="i">i</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"-5| -5|-05|-5|-5.0000"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>

  <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%d|%3d|%03d|%1d|%01.4f"</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="k">cast</span>(<span class="k">double</span>) <span class="i">i</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"0|  0|000|0|0.0000"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>

  <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e Int"><span class="n">5</span></span></span>;</span>
  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%d|%3d|%03d|%1d|%01.4f"</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="k">cast</span>(<span class="k">double</span>) <span class="i">i</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"5|  5|005|5|5.0000"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>

  <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e Int"><span class="n">10</span></span></span>;</span>
  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%d|%3d|%03d|%1d|%01.4f"</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="i">i</span>,<span class="k">cast</span>(<span class="k">double</span>) <span class="i">i</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"10| 10|010|10|10.0000"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>

  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%.0d"</span>, <span class="n">0</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">""</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>

  <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%.g"</span>, <span class="n">.34</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"0.3"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span>
  
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%.0g"</span>, <span class="n">.34</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"0.3"</span></span></span>)</span>;</span>
  
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%.2g"</span>, <span class="n">.34</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"0.34"</span></span></span>)</span>;</span>
  
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%0.0008f"</span>, <span class="n">1e-08</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"0.00000001"</span></span></span>)</span>;</span>
  
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%0.0008f"</span>, <span class="n">1e-05</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"0.00001000"</span></span></span>)</span>;</span>
  
  <span class="lc">//return;</span>
  <span class="lc">//std.c.stdio.fwrite(stream.backend.ptr, stream.backend.length, 1, stderr);</span>
  
  <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">s</span></span> = <span class="e String"><span class="sl">"helloworld"</span></span></span>;</span>
  <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">string</span></span> <span class="i">r</span>;</span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%.2s"</span>, <span class="i">s</span>[<span class="n">0</span>..<span class="n">5</span>])</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"he"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%.20s"</span>, <span class="i">s</span>[<span class="n">0</span>..<span class="n">5</span>])</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"hello"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%8s"</span>, <span class="i">s</span>[<span class="n">0</span>..<span class="n">5</span>])</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"   hello"</span></span></span>)</span>;</span>

  <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">byte</span></span><span class="t Array">[]</span> <span class="i">arrbyte</span> = <span class="e New"><span class="k">new</span> <span class="t Integral"><span class="k">byte</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span></span>;</span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrbyte</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e Int"><span class="n">100</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrbyte</span></span>[<span class="e Int"><span class="n">1</span></span>]</span> = <span class="e Sign">-<span class="e Int"><span class="n">99</span></span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrbyte</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">""</span>, <span class="i">arrbyte</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"[100 -99 0 0]"</span></span></span>)</span>;</span>

  <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">ubyte</span></span><span class="t Array">[]</span> <span class="i">arrubyte</span> = <span class="e New"><span class="k">new</span> <span class="t Integral"><span class="k">ubyte</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span></span>;</span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrubyte</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e Int"><span class="n">100</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrubyte</span></span>[<span class="e Int"><span class="n">1</span></span>]</span> = <span class="e Int"><span class="n">200</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrubyte</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">""</span>, <span class="i">arrubyte</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"[100 200 0 0]"</span></span></span>)</span>;</span>

  <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">short</span></span><span class="t Array">[]</span> <span class="i">arrshort</span> = <span class="e New"><span class="k">new</span> <span class="t Integral"><span class="k">short</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span></span>;</span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrshort</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e Int"><span class="n">100</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrshort</span></span>[<span class="e Int"><span class="n">1</span></span>]</span> = <span class="e Sign">-<span class="e Int"><span class="n">999</span></span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrshort</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">""</span>, <span class="i">arrshort</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"[100 -999 0 0]"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%s"</span>,<span class="i">arrshort</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"[100 -999 0 0]"</span></span></span>)</span>;</span>

  <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">ushort</span></span><span class="t Array">[]</span> <span class="i">arrushort</span> = <span class="e New"><span class="k">new</span> <span class="t Integral"><span class="k">ushort</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span></span>;</span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrushort</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e Int"><span class="n">100</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrushort</span></span>[<span class="e Int"><span class="n">1</span></span>]</span> = <span class="e Int"><span class="n">20_000</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrushort</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">""</span>, <span class="i">arrushort</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"[100 20000 0 0]"</span></span></span>)</span>;</span>

  <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span><span class="t Array">[]</span> <span class="i">arrint</span> = <span class="e New"><span class="k">new</span> <span class="t Integral"><span class="k">int</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span></span>;</span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrint</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e Int"><span class="n">100</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrint</span></span>[<span class="e Int"><span class="n">1</span></span>]</span> = <span class="e Sign">-<span class="e Int"><span class="n">999</span></span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrint</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">""</span>, <span class="i">arrint</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"[100 -999 0 0]"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%s"</span>,<span class="i">arrint</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"[100 -999 0 0]"</span></span></span>)</span>;</span>

  <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">long</span></span><span class="t Array">[]</span> <span class="i">arrlong</span> = <span class="e New"><span class="k">new</span> <span class="t Integral"><span class="k">long</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span></span>;</span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrlong</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e Int"><span class="n">100</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrlong</span></span>[<span class="e Int"><span class="n">1</span></span>]</span> = <span class="e Sign">-<span class="e Int"><span class="n">999</span></span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrlong</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">""</span>, <span class="i">arrlong</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"[100 -999 0 0]"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%s"</span>,<span class="i">arrlong</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"[100 -999 0 0]"</span></span></span>)</span>;</span>
    
  <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">ulong</span></span><span class="t Array">[]</span> <span class="i">arrulong</span> = <span class="e New"><span class="k">new</span> <span class="t Integral"><span class="k">ulong</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span></span>;</span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrulong</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e Int"><span class="n">100</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrulong</span></span>[<span class="e Int"><span class="n">1</span></span>]</span> = <span class="e Int"><span class="n">999</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arrulong</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> = <span class="e Int"><span class="n">0</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">""</span>, <span class="i">arrulong</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"[100 999 0 0]"</span></span></span>)</span>;</span>
  
  <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">string</span></span><span class="t Array">[]</span> <span class="i">arr2</span> = <span class="e New"><span class="k">new</span> <span class="t Identifier"><span class="i">string</span></span><span class="t Array">[<span class="e Int"><span class="n">4</span></span>]</span></span>;</span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arr2</span></span>[<span class="e Int"><span class="n">0</span></span>]</span> = <span class="e String"><span class="sl">"hello"</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arr2</span></span>[<span class="e Int"><span class="n">1</span></span>]</span> = <span class="e String"><span class="sl">"world"</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Index"><span class="e Identifier"><span class="i">arr2</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> = <span class="e String"><span class="sl">"foo"</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">""</span>, <span class="i">arr2</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"[hello world  foo]"</span></span></span>)</span>;</span>

  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%.8d"</span>, <span class="n">7</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"00000007"</span></span></span>)</span>;</span>

  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%.8x"</span>, <span class="n">10</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"0000000a"</span></span></span>)</span>;</span>

  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%-3d"</span>, <span class="n">7</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"7  "</span></span></span>)</span>;</span>
  
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%*d"</span>, -<span class="n">3</span>, <span class="n">7</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"7  "</span></span></span>)</span>;</span>

  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%.*d"</span>, -<span class="n">3</span>, <span class="n">7</span>)</span>;</span>
  <span class="lc">//writeln(stream.backend);</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"7"</span></span></span>)</span>;</span>

<span class="lc">//  assert(false);</span>
<span class="lc">//   typedef int myint;</span>
<span class="lc">//   myint m = -7;</span>
<span class="lc">//   stream.backend = null; formattedWrite(stream, "", m);</span>
<span class="lc">//   assert(stream.backend == "-7");</span>
  
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">""</span>, <span class="sl">"abc"c</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"abc"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">""</span>, <span class="sl">"def"w</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"def"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">""</span>, <span class="sl">"ghi"d</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"ghi"</span></span></span>)</span>;</span>
  
 <span class="s Labeled"><span class="i">here</span>:
  <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">void</span></span><span class="t Pointer">*</span> <span class="i">p</span> = <span class="e Cast"><span class="k">cast</span>(<span class="t Integral"><span class="k">void</span></span><span class="t Pointer">*</span>)<span class="e Int"><span class="n">0xDEADBEEF</span></span></span>;</span></span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">""</span>, <span class="i">p</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"DEADBEEF"</span></span></span>)</span>;</span>

  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%#x"</span>, <span class="n">0xabcd</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"0xabcd"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%#X"</span>, <span class="n">0xABCD</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"0XABCD"</span></span></span>)</span>;</span>

  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%#o"</span>, <span class="n">012345</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"012345"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%o"</span>, <span class="n">9</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"11"</span></span></span>)</span>;</span>

  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%+d"</span>, <span class="n">123</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"+123"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%+d"</span>, -<span class="n">123</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"-123"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"% d"</span>, <span class="n">123</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">" 123"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"% d"</span>, -<span class="n">123</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"-123"</span></span></span>)</span>;</span>
  
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%%"</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"%"</span></span></span>)</span>;</span>
  
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%d"</span>, <span class="k">true</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"1"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%d"</span>, <span class="k">false</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"0"</span></span></span>)</span>;</span>
    
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%d"</span>, <span class="cl">'a'</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"97"</span></span></span>)</span>;</span>
  <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">wchar</span></span> <span class="i">wc</span> = <span class="e Char"><span class="cl">'a'</span></span>;</span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%d"</span>, <span class="i">wc</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"97"</span></span></span>)</span>;</span>
  <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">dchar</span></span> <span class="i">dc</span> = <span class="e Char"><span class="cl">'a'</span></span>;</span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%d"</span>, <span class="i">dc</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"97"</span></span></span>)</span>;</span>

  <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">byte</span></span> <span class="i">b</span> = <span class="e TypeDotId"><span class="t Integral"><span class="k">byte</span></span>.<span class="i">max</span></span>;</span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%x"</span>, <span class="i">b</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"7f"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%x"</span>, ++<span class="i">b</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"80"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%x"</span>, ++<span class="i">b</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"81"</span></span></span>)</span>;</span>

  <span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">short</span></span> <span class="i">sh</span> = <span class="e TypeDotId"><span class="t Integral"><span class="k">short</span></span>.<span class="i">max</span></span>;</span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%x"</span>, <span class="i">sh</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"7fff"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%x"</span>, ++<span class="i">sh</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"8000"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%x"</span>, ++<span class="i">sh</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"8001"</span></span></span>)</span>;</span>
  
  <span class="s Expression"><span class="e Assign"><span class="e Identifier"><span class="i">i</span></span> = <span class="e TypeDotId"><span class="t Integral"><span class="k">int</span></span>.<span class="i">max</span></span></span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%x"</span>, <span class="i">i</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"7fffffff"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%x"</span>, ++<span class="i">i</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"80000000"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%x"</span>, ++<span class="i">i</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"80000001"</span></span></span>)</span>;</span>

  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%x"</span>, <span class="n">10</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"a"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%X"</span>, <span class="n">10</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"A"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%x"</span>, <span class="n">15</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"f"</span></span></span>)</span>;</span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%X"</span>, <span class="n">15</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"F"</span></span></span>)</span>;</span>

  <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">Object</span></span> <span class="i">c</span> = <span class="e Null"><span class="k">null</span></span>;</span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">""</span>, <span class="i">c</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"null"</span></span></span>)</span>;</span>

  <span class="s Declaration"><span class="d Enum"><span class="k">enum</span> <span class="i">TestEnum</span>
  {
    <span class="d EnumMember"><span class="i">Value1</span></span>, <span class="d EnumMember"><span class="i">Value2</span></span>
  }</span></span>
  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%s"</span>, <span class="i">TestEnum</span>.<span class="i">Value2</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"1"</span></span></span>)</span>;</span>

  <span class="lc">//invariant(char[5])[int] aa = ([3:"hello", 4:"betty"]);</span>
  <span class="lc">//stream.backend = null; formattedWrite(stream, "%s", aa.values);</span>
  <span class="lc">//std.c.stdio.fwrite(stream.backend.ptr, stream.backend.length, 1, stderr);</span>
  <span class="lc">//assert(stream.backend == "[[h,e,l,l,o],[b,e,t,t,y]]");</span>
  <span class="lc">//stream.backend = null; formattedWrite(stream, "%s", aa);</span>
  <span class="lc">//assert(stream.backend == "[3:[h,e,l,l,o],4:[b,e,t,t,y]]");</span>

  <span class="d StorageClass"><span class="k">static</span> <span class="d StorageClass"><span class="k">const</span> <span class="d Variables"><span class="t Integral"><span class="k">dchar</span></span><span class="t Array">[]</span> <span class="i">ds</span> = <span class="e ArrayInit">[<span class="e Char"><span class="cl">'a'</span></span>,<span class="e Char"><span class="cl">'b'</span></span>]</span>;</span></span></span>
  <span class="s For"><span class="k">for</span> (<span class="s Declaration"><span class="d Variables"><span class="t Integral"><span class="k">int</span></span> <span class="i">j</span> = <span class="e Int"><span class="n">0</span></span>;</span></span> <span class="e Rel"><span class="e Identifier"><span class="i">j</span></span> &lt; <span class="e Dot"><span class="e Identifier"><span class="i">ds</span></span>.<span class="e Identifier"><span class="i">length</span></span></span></span>; <span class="e PreIncr">++<span class="e Identifier"><span class="i">j</span></span></span>)
    <span class="s Compound">{
      <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">" %d"</span>, <span class="i">ds</span>[<span class="i">j</span>])</span>;</span>
      <span class="s If"><span class="k">if</span> (<span class="e Equal"><span class="e Identifier"><span class="i">j</span></span> == <span class="e Int"><span class="n">0</span></span></span>)
        <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">" 97"</span></span></span>)</span>;</span>
      <span class="k">else</span>
        <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">" 98"</span></span></span>)</span>;</span></span>
    }</span></span>

  <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%.-3d"</span>, <span class="n">7</span>)</span>;</span>
  <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"7"</span></span></span>, <span class="e Cat"><span class="e Cat"><span class="e String"><span class="sl">"&gt;"</span></span> ~ <span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span></span> ~ <span class="e String"><span class="sl">"&lt;"</span></span></span>)</span>;</span>
  

  <span class="lc">// systematic test</span>
  <span class="d StorageClass"><span class="k">const</span> <span class="d Variables"><span class="t Identifier"><span class="i">string</span></span><span class="t Array">[]</span> <span class="i">flags</span> = <span class="e ArrayInit">[ <span class="e String"><span class="sl">"-"</span></span>, <span class="e String"><span class="sl">"+"</span></span>, <span class="e String"><span class="sl">"#"</span></span>, <span class="e String"><span class="sl">"0"</span></span>, <span class="e String"><span class="sl">" "</span></span>, <span class="e String"><span class="sl">""</span></span> ]</span>;</span></span>
  <span class="d StorageClass"><span class="k">const</span> <span class="d Variables"><span class="t Identifier"><span class="i">string</span></span><span class="t Array">[]</span> <span class="i">widths</span> = <span class="e ArrayInit">[ <span class="e String"><span class="sl">""</span></span>, <span class="e String"><span class="sl">"0"</span></span>, <span class="e String"><span class="sl">"4"</span></span>, <span class="e String"><span class="sl">"20"</span></span> ]</span>;</span></span>
  <span class="d StorageClass"><span class="k">const</span> <span class="d Variables"><span class="t Identifier"><span class="i">string</span></span><span class="t Array">[]</span> <span class="i">precs</span> = <span class="e ArrayInit">[ <span class="e String"><span class="sl">""</span></span>, <span class="e String"><span class="sl">"."</span></span>, <span class="e String"><span class="sl">".0"</span></span>, <span class="e String"><span class="sl">".4"</span></span>, <span class="e String"><span class="sl">".20"</span></span> ]</span>;</span></span>
  <span class="d StorageClass"><span class="k">const</span> <span class="d Variables"><span class="t Identifier"><span class="i">string</span></span> <span class="i">formats</span> = <span class="e String"><span class="sl">"sdoxXeEfFgGaA"</span></span>;</span></span>
  <span class="nc">/+
  foreach (flag1; flags)
      foreach (flag2; flags)
          foreach (flag3; flags)
              foreach (flag4; flags)
                  foreach (flag5; flags)
                      foreach (width; widths)
                          foreach (prec; precs)
                              foreach (format; formats)
                              {
                                  stream.backend = null; 
                                  auto fmt = "%" ~ flag1 ~ flag2  ~ flag3
                                      ~ flag4 ~ flag5 ~ width ~ prec ~ format
                                      ~ '\0';
                                  fmt = fmt[0 .. $ - 1]; // keep it zero-term
                                  char buf[256];
                                  buf[0] = 0;
                                  switch (format)
                                  {
                                  case 's': 
                                      formattedWrite(stream, fmt, "wyda");
                                      snprintf(buf.ptr, buf.length, fmt.ptr,
                                          "wyda\0".ptr);
                                      break;
                                  case 'd':
                                      formattedWrite(stream, fmt, 456);
                                      snprintf(buf.ptr, buf.length, fmt.ptr,
                                               456);
                                      break; 
                                  case 'o':
                                      formattedWrite(stream, fmt, 345);
                                      snprintf(buf.ptr, buf.length, fmt.ptr,
                                               345);
                                      break; 
                                  case 'x':
                                      formattedWrite(stream, fmt, 63546);
                                      snprintf(buf.ptr, buf.length, fmt.ptr,
                                          63546);
                                      break; 
                                  case 'X':
                                      formattedWrite(stream, fmt, 12566);
                                      snprintf(buf.ptr, buf.length, fmt.ptr,
                                          12566);
                                      break; 
                                  case 'e':
                                      formattedWrite(stream, fmt, 3245.345234);
                                      snprintf(buf.ptr, buf.length, fmt.ptr,
                                          3245.345234);
                                      break; 
                                  case 'E':
                                      formattedWrite(stream, fmt, 3245.2345234);
                                      snprintf(buf.ptr, buf.length, fmt.ptr,
                                          3245.2345234);
                                      break; 
                                  case 'f':
                                      formattedWrite(stream, fmt, 3245234.645675);
                                      snprintf(buf.ptr, buf.length, fmt.ptr,
                                          3245234.645675);
                                      break; 
                                  case 'F':
                                      formattedWrite(stream, fmt, 213412.43);
                                      snprintf(buf.ptr, buf.length, fmt.ptr,
                                          213412.43);
                                      break; 
                                  case 'g':
                                      formattedWrite(stream, fmt, 234134.34);
                                      snprintf(buf.ptr, buf.length, fmt.ptr,
                                          234134.34);
                                      break; 
                                  case 'G':
                                      formattedWrite(stream, fmt, 23141234.4321);
                                      snprintf(buf.ptr, buf.length, fmt.ptr,
                                               23141234.4321);
                                      break; 
                                  case 'a':
                                      formattedWrite(stream, fmt, 21341234.2134123);
                                      snprintf(buf.ptr, buf.length, fmt.ptr,
                                               21341234.2134123);
                                      break; 
                                  case 'A':
                                      formattedWrite(stream, fmt, 1092384098.45234);
                                      snprintf(buf.ptr, buf.length, fmt.ptr,
                                               1092384098.45234);
                                      break;
                                  default:
                                      break;
                                  }
                                  auto exp = buf[0 .. strlen(buf.ptr)];
                                  if (stream.backend != exp)
                                  {
                                      writeln("Format: \"", fmt, '"');
                                      writeln("Expected: &gt;", exp, "&lt;");
                                      writeln("Actual:   &gt;", stream.backend,
                                              "&lt;");
                                      assert(false);
                                  }
                              }+/</span>
}</span></span></span>

<span class="d Unittest"><span class="k">unittest</span>
<span class="s FuncBody"><span class="s Compound">{
   <span class="d Variables"><span class="t Invariant"><span class="k">invariant</span>(<span class="t Integral"><span class="k">char</span></span><span class="t Array">[<span class="e Int"><span class="n">5</span></span>]</span>)</span><span class="t Array">[<span class="t Integral"><span class="k">int</span></span>]</span> <span class="i">aa</span> = <span class="e Paren">(<span class="e AArrayLiteral">[<span class="e Int"><span class="n">3</span></span>:<span class="e String"><span class="sl">"hello"</span></span>, <span class="e Int"><span class="n">4</span></span>:<span class="e String"><span class="sl">"betty"</span></span>]</span>)</span>;</span>
   <span class="s If"><span class="k">if</span> (<span class="e Bool"><span class="k">false</span></span>) <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">writeln</span></span>(<span class="i">aa</span>.<span class="i">keys</span>)</span>;</span></span>
   <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Index"><span class="e Identifier"><span class="i">aa</span></span>[<span class="e Int"><span class="n">3</span></span>]</span> == <span class="e String"><span class="sl">"hello"</span></span></span>)</span>;</span>
   <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Index"><span class="e Identifier"><span class="i">aa</span></span>[<span class="e Int"><span class="n">4</span></span>]</span> == <span class="e String"><span class="sl">"betty"</span></span></span>)</span>;</span>
   <span class="s If"><span class="k">if</span> (<span class="e Bool"><span class="k">false</span></span>)
   <span class="s Compound">{
       <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">writeln</span></span>(<span class="i">aa</span>.<span class="i">values</span>[<span class="n">0</span>])</span>;</span>
       <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">writeln</span></span>(<span class="i">aa</span>.<span class="i">values</span>[<span class="n">1</span>])</span>;</span>
       <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">writefln</span></span>(<span class="sl">"%s"</span>, <span class="k">typeid</span>(<span class="k">typeof</span>(<span class="i">aa</span>.<span class="i">values</span>)))</span>;</span>
       <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">writefln</span></span>(<span class="sl">"%s"</span>, <span class="i">aa</span>[<span class="n">3</span>])</span>;</span>
       <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">writefln</span></span>(<span class="sl">"%s"</span>, <span class="i">aa</span>[<span class="n">4</span>])</span>;</span>
       <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">writefln</span></span>(<span class="sl">"%s"</span>, <span class="i">aa</span>.<span class="i">values</span>)</span>;</span>
       <span class="lc">//writefln("%s", aa);</span>
       <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">wstring</span></span> <span class="i">a</span> = <span class="e String"><span class="sl">"abcd"</span></span>;</span></span>
       <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">writefln</span></span>(<span class="i">a</span>)</span>;</span>
       <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">dstring</span></span> <span class="i">b</span> = <span class="e String"><span class="sl">"abcd"</span></span>;</span></span>
       <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">writefln</span></span>(<span class="i">b</span>)</span>;</span>
   }</span></span>

   <span class="s Declaration"><span class="d Variables"><span class="t TemplateInstance"><span class="i">StringWriter</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">char</span></span></span>)</span> <span class="i">stream</span>;</span></span>
   <span class="s Declaration"><span class="d Alias"><span class="k">alias</span> <span class="d Variables"><span class="t TemplateInstance"><span class="i">TypeTuple</span>!(<span class="o TemplateArguments"><span class="t Integral"><span class="k">byte</span></span>, <span class="t Integral"><span class="k">ubyte</span></span>, <span class="t Integral"><span class="k">short</span></span>, <span class="t Integral"><span class="k">ushort</span></span>, <span class="t Integral"><span class="k">int</span></span>, <span class="t Integral"><span class="k">uint</span></span>, <span class="t Integral"><span class="k">long</span></span>, <span class="t Integral"><span class="k">ulong</span></span>,
       <span class="t Integral"><span class="k">float</span></span>, <span class="t Integral"><span class="k">double</span></span>, <span class="t Integral"><span class="k">real</span></span>,
       <span class="t Integral"><span class="k">ifloat</span></span>, <span class="t Integral"><span class="k">idouble</span></span>, <span class="t Integral"><span class="k">ireal</span></span>, <span class="t Integral"><span class="k">cfloat</span></span>, <span class="t Integral"><span class="k">cdouble</span></span>, <span class="t Integral"><span class="k">creal</span></span></span>)</span> <span class="i">AllNumerics</span>;</span></span></span>
   <span class="s Foreach"><span class="k">foreach</span> (<span class="o Parameters"><span class="o Parameter"><span class="i">T</span></span></span>; <span class="e Identifier"><span class="i">AllNumerics</span></span>)
   <span class="s Compound">{
       <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e Is"><span class="k">is</span>(<span class="t Identifier"><span class="i">T</span></span> : <span class="t Integral"><span class="k">ireal</span></span>)</span>)
           <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">T</span></span> <span class="i">value</span> = <span class="e Real"><span class="n">1i</span></span>;</span></span>
       <span class="k">else</span> <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e Is"><span class="k">is</span>(<span class="t Identifier"><span class="i">T</span></span> : <span class="t Integral"><span class="k">creal</span></span>)</span>)
           <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">T</span></span> <span class="i">value</span> = <span class="e Plus"><span class="e Int"><span class="n">1</span></span> + <span class="e Real"><span class="n">1i</span></span></span>;</span></span>
       <span class="k">else</span>
           <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">T</span></span> <span class="i">value</span> = <span class="e Int"><span class="n">1</span></span>;</span></span></span></span>
       <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%s"</span>, <span class="i">value</span>)</span>;</span>
       <span class="s StaticIf"><span class="k">static</span> <span class="k">if</span> (<span class="e Is"><span class="k">is</span>(<span class="t Identifier"><span class="i">T</span></span> : <span class="t Integral"><span class="k">creal</span></span>)</span>)
           <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"1+1i"</span></span></span>)</span>;</span>
       <span class="k">else</span>
           <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"1"</span></span></span>)</span>;</span></span>
       <span class="lc">// test typedefs too</span>
       <span class="s Declaration"><span class="d Typedef"><span class="k">typedef</span> <span class="d Variables"><span class="t Identifier"><span class="i">T</span></span> <span class="i">Wyda</span>;</span></span></span>
       <span class="s Declaration"><span class="d Variables"><span class="t Identifier"><span class="i">Wyda</span></span> <span class="i">another</span> = <span class="e Int"><span class="n">1</span></span>;</span></span>
       <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%s"</span>, <span class="i">another</span>)</span>;</span>
       <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"1"</span></span></span>)</span>;</span>
   }</span></span>
   
   <span class="lc">//auto r = std.string.format("%s", aa.values);</span>
   <span class="s Expression"><span class="e Assign"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> = <span class="e Null"><span class="k">null</span></span></span>;</span> <span class="s Expression"><span class="e Call"><span class="e Identifier"><span class="i">formattedWrite</span></span>(<span class="i">stream</span>, <span class="sl">"%s"</span>, <span class="i">aa</span>)</span>;</span>
   <span class="s Expression"><span class="e Assert"><span class="k">assert</span>(<span class="e Equal"><span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span> == <span class="e String"><span class="sl">"[3:[h,e,l,l,o],4:[b,e,t,t,y]]"</span></span></span>, <span class="e Dot"><span class="e Identifier"><span class="i">stream</span></span>.<span class="e Identifier"><span class="i">backend</span></span></span>)</span>;</span>
<span class="lc">//    r = std.string.format("%s", aa);</span>
<span class="lc">//   assert(r == "[3:[h,e,l,l,o],4:[b,e,t,t,y]]");</span>
}</span></span></span></span>

</pre></td>
</tr></table>
</body>
</html>